chore: format

This commit is contained in:
Timothy Jaeryang Baek
2026-06-01 13:56:55 -07:00
parent 1f49ebf431
commit 6fce92aa12
139 changed files with 92569 additions and 3249 deletions
+1 -1
View File
@@ -31,7 +31,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- 🪪 **More user placeholders in custom headers.** Custom-header templates for direct connections and tool servers now support "{{USER_EMAIL}}" and "{{USER_ROLE}}" alongside the existing user and session placeholders. [Commit](https://github.com/open-webui/open-webui/commit/ed73ef3d8df988b0e9646b82df5b1a453202ef8d)
- ⏱️ **Configurable MCP connection timeout.** The timeout for the initial handshake with an MCP tool server is now configurable via the new "MCP_INITIALIZE_TIMEOUT" setting, so servers that are slow to start or expose many tools can finish connecting instead of timing out. [#25011](https://github.com/open-webui/open-webui/pull/25011), [Commit](https://github.com/open-webui/open-webui/commit/4297c02b121180e239a61c483ac8477cc557d4ef)
- 📐 **Profile image size limit.** Administrators can now cap the size of inline profile images via the new "PROFILE_IMAGE_MAX_DATA_URI_SIZE" setting, bounding how much database and cache space inline avatars and model icons can consume. [#25468](https://github.com/open-webui/open-webui/issues/25468), [#25476](https://github.com/open-webui/open-webui/pull/25476)
- 🎫 **Wildcard OAuth role mapping.** Administrators can now set "*" in the allowed OAuth roles to grant the user role to any authenticated OAuth user, instead of having to enumerate every accepted role. [#25062](https://github.com/open-webui/open-webui/pull/25062), [Commit](https://github.com/open-webui/open-webui/commit/07cbc91a8eba3a9a3b39588b2ae5de916930af70)
- 🎫 **Wildcard OAuth role mapping.** Administrators can now set "\*" in the allowed OAuth roles to grant the user role to any authenticated OAuth user, instead of having to enumerate every accepted role. [#25062](https://github.com/open-webui/open-webui/pull/25062), [Commit](https://github.com/open-webui/open-webui/commit/07cbc91a8eba3a9a3b39588b2ae5de916930af70)
- 📊 **Paginated feedback history.** The feedback and evaluation history list is now paginated, keeping it responsive for instances that have accumulated large numbers of feedback entries. [Commit](https://github.com/open-webui/open-webui/commit/160a6694e4bd66fc42e6361947516e8e15414ef3)
- ➡️ **Optional auto-redirect to single sign-on.** Administrators can now enable "OAUTH_AUTO_REDIRECT" so that, on deployments with a single sign-on provider and no other login methods, users are sent straight to the provider instead of seeing a login page first. [#25067](https://github.com/open-webui/open-webui/pull/25067), [Commit](https://github.com/open-webui/open-webui/commit/d64ef1803d2f5cedb7b3a308151d08ff2cd2b8e1)
- ☁️ **Azure AI Foundry v1 with Entra ID.** Open WebUI now supports Azure AI Foundry's OpenAI v1 endpoint together with Microsoft Entra ID authentication, so these connections work without manual workarounds. [#24761](https://github.com/open-webui/open-webui/issues/24761), [#24985](https://github.com/open-webui/open-webui/pull/24985), [Commit](https://github.com/open-webui/open-webui/commit/eb4eebc3ce1042cb0d393bf890c1895db6e08b19)
+2 -6
View File
@@ -685,9 +685,7 @@ BYPASS_RETRIEVAL_ACCESS_CONTROL = os.getenv('BYPASS_RETRIEVAL_ACCESS_CONTROL', '
# web-search-*, or knowledge-base collection are allowed through access control
# for non-admin users. When False (default), unknown collection names are
# denied — closing the legacy unscoped namespace.
ENABLE_RETRIEVAL_UNSCOPED_COLLECTIONS = (
os.getenv('ENABLE_RETRIEVAL_UNSCOPED_COLLECTIONS', 'False').lower() == 'true'
)
ENABLE_RETRIEVAL_UNSCOPED_COLLECTIONS = os.getenv('ENABLE_RETRIEVAL_UNSCOPED_COLLECTIONS', 'False').lower() == 'true'
# When enabled, skips pydub-based preprocessing (format conversion, compression,
# and chunked splitting) before sending files to processing engines. Useful when
@@ -800,9 +798,7 @@ PROFILE_IMAGE_ALLOWED_MIME_TYPES = frozenset(
# Max stored length (bytes) of a data:image profile URI; bounds Postgres/Redis
# bloat from inline avatars and model icons. Unset (default) disables the cap.
_profile_image_max_data_uri_size = os.getenv('PROFILE_IMAGE_MAX_DATA_URI_SIZE', '').strip()
PROFILE_IMAGE_MAX_DATA_URI_SIZE = (
int(_profile_image_max_data_uri_size) if _profile_image_max_data_uri_size else None
)
PROFILE_IMAGE_MAX_DATA_URI_SIZE = int(_profile_image_max_data_uri_size) if _profile_image_max_data_uri_size else None
####################################
# Forward Headers
+3
View File
@@ -127,10 +127,13 @@ class JSONField(types.TypeDecorator): # TEXT-backed JSON storage
impl = types.UnicodeText
cache_ok = True
def process_bind_param(self, value: _T | None, dialect: Dialect) -> Any:
return json.dumps(value) if value is not None else None
def process_result_value(self, value: _T | None, dialect: Dialect) -> Any:
return json.loads(value) if value is not None else None
def copy(self, **kwargs: Any) -> Self:
return JSONField(length=self.impl.length)
+5 -1
View File
@@ -2061,7 +2061,9 @@ async def chat_completion(
if metadata.get('chat_id') and metadata.get('message_id'):
# Update the chat message with the error
try:
if not metadata.get('chat_id', '').startswith('local:') and not metadata.get('chat_id', '').startswith('channel:'):
if not metadata.get('chat_id', '').startswith('local:') and not metadata.get(
'chat_id', ''
).startswith('channel:'):
await Chats.upsert_message_to_chat_by_id_and_message_id(
metadata['chat_id'],
metadata['message_id'],
@@ -2969,6 +2971,8 @@ async def check_db_health():
"""Verify database connectivity by issuing a lightweight ping."""
await async_db_ping()
return {'status': True}
# --- static assets & files ---
# Serve build-time static assets (CSS, JS, images, favicon, etc.)
app.mount('/static', StaticFiles(directory=STATIC_DIR), name='static')
+20 -1
View File
@@ -1,4 +1,5 @@
from __future__ import annotations
# Alembic environment configuration runner.
# Coordinates database migrations in both offline and online execution modes.
import logging.config
@@ -9,11 +10,13 @@ from open_webui.internal.db import extract_ssl_params_from_url, reattach_ssl_par
from open_webui.models.auths import Auth
from open_webui.models.calendar import Calendar, CalendarEvent, CalendarEventAttendee # noqa: F401
from sqlalchemy import create_engine, engine_from_config, pool
alembic_config = alembic.context.config
if alembic_config.config_file_name:
logging.config.fileConfig(alembic_config.config_file_name, disable_existing_loggers=False)
if LOG_FORMAT == 'json':
from open_webui.env import JSONFormatter
for log_handler in logging.root.handlers:
log_handler.setFormatter(JSONFormatter())
migration_metadata = Auth.metadata
@@ -23,12 +26,21 @@ if ssl_query_params:
target_db_url = reattach_ssl_params_to_url(base_url, ssl_query_params)
if target_db_url:
alembic_config.set_main_option('sqlalchemy.url', target_db_url.replace('%', '%%'))
def run_migrations_offline() -> None:
"""Execute Alembic migrations in offline mode (outputs raw SQL DDL)."""
db_connection_url = alembic_config.get_main_option('sqlalchemy.url')
alembic.context.configure(url=db_connection_url, target_metadata=migration_metadata, literal_binds=True, dialect_opts={"paramstyle": "named"})
alembic.context.configure(
url=db_connection_url,
target_metadata=migration_metadata,
literal_binds=True,
dialect_opts={'paramstyle': 'named'},
)
with alembic.context.begin_transaction():
alembic.context.run_migrations()
def _get_engine_connectable():
"""Build the database engine based on target URL and authentication credentials."""
if target_db_url and target_db_url.startswith('sqlite+sqlcipher://'):
@@ -37,17 +49,22 @@ def _get_engine_connectable():
raw_db_path = target_db_url.replace('sqlite+sqlcipher://', '')
if raw_db_path.startswith('/'):
raw_db_path = raw_db_path[1:]
def _sqlite_cipher_creator():
import sqlcipher3
cipher_conn = sqlcipher3.connect(raw_db_path, check_same_thread=False)
cipher_conn.execute(f"PRAGMA key = '{DATABASE_PASSWORD}'")
return cipher_conn
return create_engine('sqlite://', creator=_sqlite_cipher_creator, echo=False)
return engine_from_config(
alembic_config.get_section(alembic_config.config_ini_section, {}),
prefix='sqlalchemy.',
poolclass=pool.NullPool,
)
def run_migrations_online() -> None:
"""Execute migrations against a live database connection."""
live_connectable = _get_engine_connectable()
@@ -58,6 +75,8 @@ def run_migrations_online() -> None:
)
with alembic.context.begin_transaction():
alembic.context.run_migrations()
# Alembic execution entrypoint branch
if alembic.context.is_offline_mode():
run_migrations_offline() # run in offline mode
+2
View File
@@ -4,6 +4,8 @@ from __future__ import annotations
from alembic import op # noqa: E402 — alembic runtime context
from sqlalchemy import inspect # metadata inspection
# --- database helper functions ---
def get_existing_tables() -> set[str]:
"""Return table names already present in the database."""
@@ -53,7 +53,9 @@ def upgrade():
if 'channel_member' not in existing_tables:
op.create_table(
'channel_member',
sa.Column('id', sa.Text(), nullable=False, primary_key=True, unique=True), # Record ID for the membership row
sa.Column(
'id', sa.Text(), nullable=False, primary_key=True, unique=True
), # Record ID for the membership row
sa.Column('channel_id', sa.Text(), nullable=False), # Associated channel
sa.Column('user_id', sa.Text(), nullable=False), # Associated user
sa.Column('created_at', sa.BigInteger(), nullable=True), # Timestamp of when the user joined the channel
@@ -42,9 +42,9 @@ def upgrade() -> None:
# Create indexes (idempotent — no-ops when table was just created
# with the columns above, and safe to call if indexes already exist).
existing_indexes = {
idx['name'] for idx in inspector.get_indexes('oauth_session')
} if 'oauth_session' in existing_tables else set()
existing_indexes = (
{idx['name'] for idx in inspector.get_indexes('oauth_session')} if 'oauth_session' in existing_tables else set()
)
if 'idx_oauth_session_user_id' not in existing_indexes:
op.create_index('idx_oauth_session_user_id', 'oauth_session', ['user_id'])
@@ -5,6 +5,7 @@ Revises: a0b1c2d3e4f5
Create Date: 2026-05-13 21:58:40.832482
"""
from typing import Sequence, Union
from alembic import op
@@ -36,7 +37,9 @@ def upgrade() -> None:
sa.ForeignKeyConstraint(['knowledge_id'], ['knowledge.id'], ondelete='CASCADE'),
sa.ForeignKeyConstraint(['parent_id'], ['knowledge_directory.id'], ondelete='CASCADE'),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('knowledge_id', 'parent_id', 'name', name='uq_knowledge_directory_knowledge_parent_name'),
sa.UniqueConstraint(
'knowledge_id', 'parent_id', 'name', name='uq_knowledge_directory_knowledge_parent_name'
),
)
op.create_index('ix_knowledge_directory_knowledge_id', 'knowledge_directory', ['knowledge_id'])
op.create_index('ix_knowledge_directory_parent_id', 'knowledge_directory', ['parent_id'])
@@ -5,6 +5,7 @@ Revises: 3c9b0ca343fd
Create Date: 2026-05-14 04:38:14.000000
"""
from typing import Sequence, Union
import sqlalchemy as sa
@@ -21,9 +22,18 @@ depends_on: Union[str, Sequence[str], None] = None
# already have correct PKs from 7e5b5dc7342b_init.py.
# 'tag' uses a composite PK since the same tag name can exist for multiple users.
LEGACY_TABLES = {
'auth': ['id'], 'chat': ['id'], 'chatidtag': ['id'], 'document': ['id'],
'file': ['id'], 'function': ['id'], 'memory': ['id'], 'model': ['id'],
'prompt': ['id'], 'tag': ['id', 'user_id'], 'tool': ['id'], 'user': ['id'],
'auth': ['id'],
'chat': ['id'],
'chatidtag': ['id'],
'document': ['id'],
'file': ['id'],
'function': ['id'],
'memory': ['id'],
'model': ['id'],
'prompt': ['id'],
'tag': ['id', 'user_id'],
'tool': ['id'],
'user': ['id'],
}
@@ -52,13 +52,18 @@ def upgrade() -> None:
column('created_at', sa.BigInteger),
)
notes = conn.execute(select(note_table.c.id, note_table.c.user_id).where(note_table.c.is_pinned == True)).fetchall()
notes = conn.execute(
select(note_table.c.id, note_table.c.user_id).where(note_table.c.is_pinned == True)
).fetchall()
if notes:
now = int(time.time_ns())
conn.execute(
insert(pinned_note_table),
[{'id': str(uuid.uuid4()), 'user_id': note[1], 'note_id': note[0], 'created_at': now} for note in notes],
[
{'id': str(uuid.uuid4()), 'user_id': note[1], 'note_id': note[0], 'created_at': now}
for note in notes
],
)
with op.batch_alter_table('note', schema=None) as batch_op:
@@ -95,7 +95,9 @@ def upgrade() -> None:
inspector.clear_cache()
if 'calendar_event_attendee' in inspector.get_table_names():
if not _index_exists(inspector, 'ix_calendar_event_attendee_user', 'calendar_event_attendee'):
op.create_index('ix_calendar_event_attendee_user', 'calendar_event_attendee', ['user_id', 'status'], unique=False)
op.create_index(
'ix_calendar_event_attendee_user', 'calendar_event_attendee', ['user_id', 'status'], unique=False
)
def downgrade() -> None:
@@ -48,7 +48,9 @@ def upgrade() -> None:
sa.Index('ix_channel_file_file_id', 'file_id'),
sa.Index('ix_channel_file_user_id', 'user_id'),
# unique constraints
sa.UniqueConstraint('channel_id', 'file_id', name='uq_channel_file_channel_file'), # prevent duplicate entries
sa.UniqueConstraint(
'channel_id', 'file_id', name='uq_channel_file_channel_file'
), # prevent duplicate entries
)
@@ -9,7 +9,8 @@ import sqlalchemy as sa
from alembic import op
from open_webui.internal.db import JSONField
from open_webui.migrations.util import get_existing_tables
revision: str = "7e5b5dc7342b"
revision: str = '7e5b5dc7342b'
down_revision: str | None = None
branch_labels: str | Sequence[str] | None = None
depends_on: str | Sequence[str] | None = None
@@ -175,12 +176,16 @@ _INITIAL_TABLES: list[tuple[str, list[sa.Column], list]] = [
],
),
]
# --- migration execution ---
def upgrade() -> None: # deploy initial schema tables
existing_tables = set(get_existing_tables())
for name, columns, constraints in _INITIAL_TABLES:
if name not in existing_tables:
op.create_table(name, *columns, *constraints)
# --- rollback function ---
def downgrade() -> None: # rollback initial schema tables
for table_name, _, _ in reversed(_INITIAL_TABLES):
@@ -182,27 +182,18 @@ def upgrade() -> None:
# ── Migrate oauth_sub → oauth JSON (only if old column still exists)
if 'oauth_sub' in user_columns:
rows = conn.execute(
sa.select(_user.c.id, _user.c.oauth_sub)
.where(_user.c.oauth_sub.is_not(None))
).fetchall()
rows = conn.execute(sa.select(_user.c.id, _user.c.oauth_sub).where(_user.c.oauth_sub.is_not(None))).fetchall()
for uid, oauth_sub in rows:
if oauth_sub:
provider, sub = (oauth_sub.split('@', 1) if '@' in oauth_sub
else ('oidc', oauth_sub))
provider, sub = oauth_sub.split('@', 1) if '@' in oauth_sub else ('oidc', oauth_sub)
conn.execute(
sa.update(_user)
.where(_user.c.id == uid)
.values(oauth=json.dumps({provider: {'sub': sub}}))
sa.update(_user).where(_user.c.id == uid).values(oauth=json.dumps({provider: {'sub': sub}}))
)
# ── Migrate api_key column → api_key table (only if old column still exists)
if 'api_key' in user_columns:
rows = conn.execute(
sa.select(_user.c.id, _user.c.api_key)
.where(_user.c.api_key.is_not(None))
).fetchall()
rows = conn.execute(sa.select(_user.c.id, _user.c.api_key).where(_user.c.api_key.is_not(None))).fetchall()
now = int(time.time())
for uid, key_val in rows:
@@ -233,10 +224,7 @@ def downgrade() -> None:
op.add_column('user', sa.Column('oauth_sub', sa.Text(), nullable=True))
conn = op.get_bind()
rows = conn.execute(
sa.select(_user.c.id, _user.c.oauth)
.where(_user.c.oauth.is_not(None))
).fetchall()
rows = conn.execute(sa.select(_user.c.id, _user.c.oauth).where(_user.c.oauth.is_not(None))).fetchall()
for uid, oauth in rows:
try:
@@ -247,11 +235,7 @@ def downgrade() -> None:
except Exception:
oauth_sub = None
conn.execute(
sa.update(_user)
.where(_user.c.id == uid)
.values(oauth_sub=oauth_sub)
)
conn.execute(sa.update(_user).where(_user.c.id == uid).values(oauth_sub=oauth_sub))
op.drop_column('user', 'oauth')
@@ -260,11 +244,7 @@ def downgrade() -> None:
keys = conn.execute(sa.select(_api_key.c.user_id, _api_key.c.key)).fetchall()
for uid, key in keys:
conn.execute(
sa.update(_user)
.where(_user.c.id == uid)
.values(api_key=key)
)
conn.execute(sa.update(_user).where(_user.c.id == uid).values(api_key=key))
op.drop_table('api_key')
@@ -101,9 +101,7 @@ def upgrade():
# Check if shared_chat record already exists (idempotent)
existing_shared = conn.execute(
sa.select(shared_chat_t.c.id).where(
shared_chat_t.c.id == share_token
)
sa.select(shared_chat_t.c.id).where(shared_chat_t.c.id == share_token)
).fetchone()
if not existing_shared:
+28 -9
View File
@@ -119,7 +119,13 @@ class AuthsTable:
session.add(credential)
created_user = await Users.insert_new_user(
new_id, name, email, profile_image_url, role, oauth=oauth, db=session,
new_id,
name,
email,
profile_image_url,
role,
oauth=oauth,
db=session,
)
# persist both records and reload generated defaults
await session.commit()
@@ -127,7 +133,10 @@ class AuthsTable:
return created_user if credential and created_user else None
async def authenticate_user(
self, email: str, verify_password: callable, db: AsyncSession | None = None,
self,
email: str,
verify_password: callable,
db: AsyncSession | None = None,
) -> UserModel | None:
"""Verify email + password credentials and return the matching user."""
log.info('authenticate_user: %s', email)
@@ -144,7 +153,9 @@ class AuthsTable:
return resolved
async def authenticate_user_by_api_key(
self, api_key: str, db: AsyncSession | None = None,
self,
api_key: str,
db: AsyncSession | None = None,
) -> UserModel | None:
"""Look up the user that owns the given API key."""
log.info('authenticate_user_by_api_key')
@@ -163,17 +174,19 @@ class AuthsTable:
# single JOIN avoids N+1 — returns (Auth, User) tuple or None
async with get_async_db_context(db) as session:
joined_query = (
select(Auth, User)
.join(User, Auth.id == User.id)
.where(Auth.email == email, Auth.active.is_(True))
select(Auth, User).join(User, Auth.id == User.id).where(Auth.email == email, Auth.active.is_(True))
)
match = (await session.execute(joined_query)).first()
if not match:
return
_, found_user = match
return UserModel.model_validate(found_user)
async def update_email_by_id(
self, user_id: str, email: str, db: AsyncSession | None = None,
self,
user_id: str,
email: str,
db: AsyncSession | None = None,
) -> bool:
"""Set a new email on the auth record and propagate to the user row."""
async with get_async_db_context(db) as session:
@@ -185,8 +198,12 @@ class AuthsTable:
await Users.update_user_by_id(user_id, {'email': email}, db=session)
return True
# --- password modification ---
async def update_user_password_by_id(
self, user_id: str, new_password: str, db: AsyncSession | None = None,
self,
user_id: str,
new_password: str,
db: AsyncSession | None = None,
) -> bool:
"""Set a new password hash for an existing user."""
async with get_async_db_context(db) as session:
@@ -198,7 +215,9 @@ class AuthsTable:
return True
async def delete_auth_by_id(
self, id: str, db: AsyncSession | None = None,
self,
id: str,
db: AsyncSession | None = None,
) -> bool:
"""Remove a user and their auth credential in one transaction."""
async with get_async_db_context(db) as session:
+18 -9
View File
@@ -6,6 +6,7 @@ import json
import logging
import time
import uuid
# local imports
from open_webui.internal.db import Base, JSONField, get_async_db_context
from open_webui.models.automations import AutomationRun
@@ -358,9 +359,7 @@ class ChatTable:
) -> list[ChatModel]:
async with get_async_db_context(db) as session:
# Validate folder_id references — clear any that don't exist
folder_ids = {
f.folder_id for f in chat_import_forms if f.folder_id
}
folder_ids = {f.folder_id for f in chat_import_forms if f.folder_id}
existing = set()
for fid in folder_ids:
if await Folders.get_folder_by_id_and_user_id(fid, user_id, db=session):
@@ -402,7 +401,10 @@ class ChatTable:
return [ChatModel.model_validate(chat) for chat in chats]
async def update_chat_by_id(
self, id: str, chat: dict, db: AsyncSession | None = None,
self,
id: str,
chat: dict,
db: AsyncSession | None = None,
) -> ChatModel | None:
"""Persist updated chat content, sanitizing null bytes."""
try: # load the chat record for in-place mutation
@@ -512,9 +514,7 @@ class ChatTable:
except Exception as e:
log.warning('Backfill failed for message %s in chat %s: %s', message_id, chat_id, e)
async def reconcile_messages_by_chat_id(
self, chat_id: str, user_id: str, messages: dict[str, dict]
) -> None:
async def reconcile_messages_by_chat_id(self, chat_id: str, user_id: str, messages: dict[str, dict]) -> None:
"""Sync ``chat_message`` rows with the committed JSON blob.
Upserts current messages via ``backfill_messages_by_chat_id``
@@ -692,9 +692,12 @@ class ChatTable:
await session.commit()
await session.refresh(chat)
return ChatModel.model_validate(chat) # return the updated original
# refresh helper
async def update_shared_chat_by_chat_id(
self, chat_id: str, db: AsyncSession | None = None,
self,
chat_id: str,
db: AsyncSession | None = None,
) -> ChatModel | None:
"""Refresh the shared snapshot with current chat content."""
from open_webui.models.shared_chats import SharedChats
@@ -953,9 +956,12 @@ class ChatTable:
)
all_chats = result.scalars().all()
return [ChatModel.model_validate(chat) for chat in all_chats]
# retrieve conversation
async def get_chat_by_id(
self, id: str, db: AsyncSession | None = None,
self,
id: str,
db: AsyncSession | None = None,
) -> ChatModel | None:
"""Fetch a chat by PK, auto-sanitizing null bytes on read."""
try:
@@ -1034,6 +1040,7 @@ class ChatTable:
result = await session.execute(select(Chat).order_by(Chat.updated_at.desc()))
all_chats = result.scalars().all()
return [ChatModel.model_validate(chat) for chat in all_chats]
# list user conversations
async def get_chats_by_user_id(
self,
@@ -1082,6 +1089,7 @@ class ChatTable:
'total': total,
}
)
# list pinned chats
async def get_pinned_chats_by_user_id(
self, user_id: str, db: AsyncSession | None = None
@@ -1112,6 +1120,7 @@ class ChatTable:
select(Chat).filter_by(user_id=user_id, archived=True).order_by(Chat.updated_at.desc())
)
return [ChatModel.model_validate(chat) for chat in result.scalars().all()]
# search user conversations
async def get_chats_by_user_id_and_search_text(
self,
+7 -8
View File
@@ -4,6 +4,7 @@ from __future__ import annotations
import logging
import time
# local imports
from open_webui.internal.db import Base, JSONField, get_async_db_context
from open_webui.utils.misc import sanitize_metadata
@@ -46,6 +47,7 @@ class FileModel(BaseModel):
created_at: int | None # timestamp in epoch
updated_at: int | None # timestamp in epoch
# --- metadata structures ---
class FileMeta(BaseModel):
name: str | None = None
@@ -150,7 +152,9 @@ class FilesTable:
return None # insertion failed
async def get_file_by_id(
self, id: str, db: AsyncSession | None = None,
self,
id: str,
db: AsyncSession | None = None,
) -> FileModel | None:
"""Look up a file by its primary key."""
try:
@@ -409,9 +413,7 @@ class FilesTable:
# Subquery: file IDs already linked to this knowledge base
linked_ids = (
select(KnowledgeFile.file_id)
.filter(KnowledgeFile.knowledge_id == knowledge_id)
.correlate(None)
select(KnowledgeFile.file_id).filter(KnowledgeFile.knowledge_id == knowledge_id).correlate(None)
)
stmt = (
@@ -424,10 +426,7 @@ class FilesTable:
.order_by(File.created_at.desc())
)
result = await db.execute(stmt)
return [
FileModelResponse.model_validate(f, from_attributes=True)
for f in result.scalars().all()
]
return [FileModelResponse.model_validate(f, from_attributes=True) for f in result.scalars().all()]
except Exception as e:
log.warning(f'Error fetching pending files for knowledge {knowledge_id}: {e}')
return []
+2
View File
@@ -4,6 +4,7 @@ from __future__ import annotations
import logging
import time
# local imports
from open_webui.internal.db import Base, JSONField, get_async_db_context
from open_webui.models.users import UserModel, UserResponse, Users
@@ -52,6 +53,7 @@ class FunctionModel(BaseModel):
model_config = ConfigDict(from_attributes=True) # allows ORM model binding
# --- form / schema definitions ---
class FunctionWithValvesModel(BaseModel):
id: str
+1
View File
@@ -34,6 +34,7 @@ class MemoryModel(BaseModel):
created_at: int # timestamp in epoch
model_config = ConfigDict(from_attributes=True) # allows ORM mapping
class MemoriesTable:
async def insert_new_memory(
self,
+2 -6
View File
@@ -51,8 +51,7 @@ class ModelMeta(BaseModel):
if v not in _warned_profile_urls:
_warned_profile_urls.add(v)
log.warning(
'Clearing invalid profile_image_url stored in DB '
'(likely a legacy SVG data-URI): %.80s',
'Clearing invalid profile_image_url stored in DB (likely a legacy SVG data-URI): %.80s',
v,
)
return None
@@ -74,7 +73,6 @@ class ModelMeta(BaseModel):
class Model(Base):
"""Workspace model entry — wraps an upstream LLM with custom params and metadata."""
__tablename__ = 'model'
@@ -195,9 +193,7 @@ class ModelsTable:
models: list[ModelModel] = []
for model in all_models:
try:
models.append(
await self._to_model_model(model, access_grants=grants_map.get(model.id, []), db=db)
)
models.append(await self._to_model_model(model, access_grants=grants_map.get(model.id, []), db=db))
except Exception as exc:
log.error('Skipping model %r during get_all_models due to error: %s', model.id, exc)
return models
+39 -18
View File
@@ -55,6 +55,8 @@ class PromptModel(BaseModel):
access_grants: list[AccessGrantModel] = Field(default_factory=list)
model_config = ConfigDict(from_attributes=True) # allows ORM model binding
# --- form / schema definitions ---
# Forms
####################
@@ -107,26 +109,36 @@ class PromptsTable:
)
return PromptModel.model_validate(prompt_data)
async def insert_new_prompt(self, user_id: str, form_data: PromptForm, db: AsyncSession | None = None) -> PromptModel | None:
async def insert_new_prompt(
self, user_id: str, form_data: PromptForm, db: AsyncSession | None = None
) -> PromptModel | None:
now = int(time.time())
prompt_id = str(uuid.uuid4())
async with get_async_db_context(db) as session:
try:
record = Prompt(
id=prompt_id, user_id=user_id,
command=form_data.command, name=form_data.name,
id=prompt_id,
user_id=user_id,
command=form_data.command,
name=form_data.name,
content=form_data.content,
data=form_data.data or {}, meta=form_data.meta or {},
tags=form_data.tags or [], is_active=True,
created_at=now, updated_at=now,
data=form_data.data or {},
meta=form_data.meta or {},
tags=form_data.tags or [],
is_active=True,
created_at=now,
updated_at=now,
)
session.add(record)
await session.commit()
await session.refresh(record) # populate generated defaults
await AccessGrants.set_access_grants(
'prompt', prompt_id, form_data.access_grants, db=session,
'prompt',
prompt_id,
form_data.access_grants,
db=session,
) # persist sharing rules
if not record: # shouldn't happen, but guard anyway
@@ -145,8 +157,10 @@ class PromptsTable:
}
history_entry = await PromptHistories.create_history_entry(
prompt_id=prompt_id, snapshot=snapshot,
user_id=user_id, parent_id=None,
prompt_id=prompt_id,
snapshot=snapshot,
user_id=user_id,
parent_id=None,
commit_message=form_data.commit_message or 'Initial version',
db=session,
) # creates the first version entry
@@ -178,9 +192,7 @@ class PromptsTable:
async def get_prompt_by_command(self, command: str, db: AsyncSession | None = None) -> PromptModel | None:
"""Look up a prompt by its unique slash-command string."""
async with get_async_db_context(db) as session:
match = (await session.execute(
select(Prompt).where(Prompt.command == command)
)).scalars().first()
match = (await session.execute(select(Prompt).where(Prompt.command == command))).scalars().first()
if match is None:
return
return await self._to_prompt_model(match, db=session)
@@ -190,9 +202,15 @@ class PromptsTable:
async def get_prompts(self, db: AsyncSession | None = None) -> list[PromptUserResponse]:
"""Return all active prompts ordered by most recently updated."""
async with get_async_db_context(db) as session:
active = (await session.execute(
select(Prompt).where(Prompt.is_active.is_(True)).order_by(Prompt.updated_at.desc())
)).scalars().all()
active = (
(
await session.execute(
select(Prompt).where(Prompt.is_active.is_(True)).order_by(Prompt.updated_at.desc())
)
)
.scalars()
.all()
)
user_ids = list(set(p.user_id for p in active))
prompt_ids = [p.id for p in active]
@@ -600,10 +618,13 @@ class PromptsTable:
return await self._to_prompt_model(prompt, db=session)
except Exception as e: # connection error
log.error(f"Failed to restore prompt version: {e}")
log.error(f'Failed to restore prompt version: {e}')
return None # restoration failed
async def toggle_prompt_active(
self, prompt_id: str, db: AsyncSession | None = None,
self,
prompt_id: str,
db: AsyncSession | None = None,
) -> PromptModel | None:
"""Flip the is_active flag on a prompt."""
if not prompt_id:
@@ -654,7 +675,7 @@ class PromptsTable:
return True
return False
except Exception as err:
log.error(f"Failed to delete prompt: {err}")
log.error(f'Failed to delete prompt: {err}')
return False # deletion failed
async def get_tags(self, db: AsyncSession | None = None) -> list[str]:
+6 -1
View File
@@ -5,6 +5,7 @@ from __future__ import annotations
import logging
import time
import uuid
# local imports
from open_webui.internal.db import Base, JSONField, get_async_db_context
from pydantic import BaseModel, ConfigDict
@@ -37,6 +38,7 @@ class TagModel(BaseModel):
meta: dict | None = None
model_config = ConfigDict(from_attributes=True) # allows ORM model binding
# --- tag schema forms ---
# Forms
####################
@@ -49,7 +51,10 @@ class TagChatIdForm(BaseModel):
class TagTable:
async def insert_new_tag(
self, name: str, user_id: str, db: AsyncSession | None = None,
self,
name: str,
user_id: str,
db: AsyncSession | None = None,
) -> TagModel | None:
"""Create a new tag, deriving the id from the name."""
async with get_async_db_context(db) as db:
+7 -7
View File
@@ -4,6 +4,7 @@ from __future__ import annotations
import logging
import time
# local imports
from open_webui.internal.db import Base, JSONField, get_async_db_context
from open_webui.models.access_grants import AccessGrantModel, AccessGrants
@@ -50,6 +51,7 @@ class ToolModel(BaseModel):
model_config = ConfigDict(from_attributes=True) # enables ORM mapping
# --- tool request forms ---
# Forms
####################
@@ -138,7 +140,9 @@ class ToolsTable:
return None # creation failed
async def get_tool_by_id(
self, id: str, db: AsyncSession | None = None,
self,
id: str,
db: AsyncSession | None = None,
) -> ToolModel | None:
"""Fetch a single tool by primary key, including access grants."""
try: # single PK lookup + access grants
@@ -150,18 +154,14 @@ class ToolsTable:
except Exception:
return None
async def get_tools_by_ids(
self, tool_ids: list[str], db: AsyncSession | None = None
) -> dict[str, ToolModel]:
async def get_tools_by_ids(self, tool_ids: list[str], db: AsyncSession | None = None) -> dict[str, ToolModel]:
"""Batch-fetch multiple tools by ID, returning a dict keyed by tool ID."""
if not tool_ids:
return {}
async with get_async_db_context(db) as db:
result = await db.execute(select(Tool).where(Tool.id.in_(tool_ids)))
tools = result.scalars().all()
grants_map = await AccessGrants.get_grants_by_resources(
'tool', [tool.id for tool in tools], db=db
)
grants_map = await AccessGrants.get_grants_by_resources('tool', [tool.id for tool in tools], db=db)
return {
tool.id: await self._to_tool_model(tool, access_grants=grants_map.get(tool.id, []), db=db)
for tool in tools
+36 -21
View File
@@ -46,11 +46,11 @@ class UserSettings(BaseModel):
class User(Base): # identity & profile
"""One row per registered account — profile, role, and settings."""
__tablename__: str = 'user' # Identity & Credentials
__tablename__: str = 'user' # Identity & Credentials
id = Column(String, primary_key=True, unique=True) # unique user id
email = Column(String, unique=True) # user email address
username = Column(String(50), nullable=True) # custom handle
role = Column(String, default="pending") # permissions role
role = Column(String, default='pending') # permissions role
name = Column(String, nullable=False) # display name
# Profile
@@ -117,20 +117,16 @@ class UserModel(BaseModel):
model_config = ConfigDict(
from_attributes=True,
)
# validation schema logic
# --- model validators ---
@model_validator(mode='after')
def _ensure_profile_image(self) -> 'UserModel':
"""Assign a generated avatar when no profile image is provided."""
self.profile_image_url = (
self.profile_image_url
or _DEFAULT_PROFILE_IMAGE_URL.format(user_id=self.id)
)
self.profile_image_url = self.profile_image_url or _DEFAULT_PROFILE_IMAGE_URL.format(user_id=self.id)
return self
class UserStatusModel(UserModel):
is_active: bool = False
@@ -303,31 +299,37 @@ class UsersTable:
await session.commit()
await session.refresh(result)
return user if result else None
# database read methods
# --- read / lookup operations ---
async def get_user_by_id(
self, id: str, db: AsyncSession | None = None,
self,
id: str,
db: AsyncSession | None = None,
) -> UserModel | None:
"""Fetch a single user by primary key."""
async with get_async_db_context(db) as session:
user = await session.get(User, id)
return UserModel.model_validate(user) if user else None
# api key auth helper
async def get_user_by_api_key(
self, api_key: str, db: AsyncSession | None = None,
self,
api_key: str,
db: AsyncSession | None = None,
) -> UserModel | None:
"""Resolve a user from their API key via a JOIN on the api_key table."""
async with get_async_db_context(db) as session:
result = await session.execute(
select(User)
.join(ApiKey, User.id == ApiKey.user_id)
.where(ApiKey.key == api_key),
select(User).join(ApiKey, User.id == ApiKey.user_id).where(ApiKey.key == api_key),
)
user = result.scalars().first()
return UserModel.model_validate(user) if user else None
async def get_user_by_email(
self, email: str, db: AsyncSession | None = None,
self,
email: str,
db: AsyncSession | None = None,
) -> UserModel | None:
"""Case-insensitive email lookup using SQL lower()."""
async with get_async_db_context(db) as session:
@@ -342,7 +344,10 @@ class UsersTable:
# --- oauth & integrations ---
async def get_user_by_oauth_sub(
self, provider: str, sub: str, db: AsyncSession | None = None,
self,
provider: str,
sub: str,
db: AsyncSession | None = None,
) -> UserModel | None:
"""Look up a user by OAuth provider + subject claim (dialect-aware JSON filter)."""
async with get_async_db_context(db) as session:
@@ -358,7 +363,10 @@ class UsersTable:
return UserModel.model_validate(row) if row else None
async def get_user_by_scim_external_id(
self, provider: str, external_id: str, db: AsyncSession | None = None,
self,
provider: str,
external_id: str,
db: AsyncSession | None = None,
) -> UserModel | None:
"""Look up a user by SCIM provider + external ID (dialect-aware JSON filter)."""
async with get_async_db_context(db) as session:
@@ -373,10 +381,12 @@ class UsersTable:
row = (await session.execute(query)).scalars().first()
return UserModel.model_validate(row) if row else None
async def get_users(
self, filter: dict | None = None, skip: int | None = None,
limit: int | None = None, db: AsyncSession | None = None,
self,
filter: dict | None = None,
skip: int | None = None,
limit: int | None = None,
db: AsyncSession | None = None,
) -> dict:
"""Paginated user listing with optional filters for role, group, and channel."""
async with get_async_db_context(db) as session:
@@ -531,11 +541,13 @@ class UsersTable:
result = await session.execute(select(User).filter(User.id.in_(user_ids)))
users = result.scalars().all()
return [UserModel.model_validate(user) for user in users]
# count registered accounts
async def get_num_users(self, db: AsyncSession | None = None) -> int | None:
async with get_async_db_context(db) as session:
result = await session.execute(select(func.count()).select_from(User))
return result.scalar()
# check user existence
async def has_users(self, db: AsyncSession | None = None) -> bool:
async with get_async_db_context(db) as session:
@@ -589,7 +601,10 @@ class UsersTable:
return UserModel.model_validate(user)
async def update_user_profile_image_url_by_id(
self, id: str, profile_image_url: str, db: AsyncSession | None = None,
self,
id: str,
profile_image_url: str,
db: AsyncSession | None = None,
) -> UserModel | None:
async with get_async_db_context(db) as session:
user = await session.get(User, id)
@@ -650,6 +665,7 @@ class UsersTable:
await session.commit()
await session.refresh(user)
return UserModel.model_validate(user)
# settings update helper
async def update_user_settings_by_id(
self, id: str, updated: dict, db: AsyncSession | None = None
@@ -745,4 +761,3 @@ class UsersTable:
Users = UsersTable() # singleton user repository
+32 -33
View File
@@ -273,18 +273,18 @@ class Loader:
4. Falling back to latin-1 (always valid, ftfy fixes mojibake later).
"""
try:
with open(file_path, "rb") as f:
with open(file_path, 'rb') as f:
raw = f.read()
except OSError:
return "utf-8"
return 'utf-8'
if not raw:
return "utf-8"
return 'utf-8'
# Fast path: most files are UTF-8
try:
raw.decode("utf-8")
return "utf-8"
raw.decode('utf-8')
return 'utf-8'
except UnicodeDecodeError:
pass
@@ -292,24 +292,24 @@ class Loader:
import chardet
detected = chardet.detect(raw)
detected_enc = (detected.get("encoding") or "").lower().replace("-", "").replace("_", "")
detected_enc = (detected.get('encoding') or '').lower().replace('-', '').replace('_', '')
# Map chardet's detected encoding to the correct superset codec.
# chardet often reports GB2312 for content that is actually GB18030;
# GB18030 is a strict superset of both GB2312 and GBK.
_ENC_FAMILY = {
"gb2312": "gb18030",
"gb18030": "gb18030",
"gbk": "gb18030",
"big5": "big5",
"euckr": "euc-kr",
"eucjp": "euc-jp",
"iso2022jp": "euc-jp",
"shiftjis": "shift_jis",
'gb2312': 'gb18030',
'gb18030': 'gb18030',
'gbk': 'gb18030',
'big5': 'big5',
'euckr': 'euc-kr',
'eucjp': 'euc-jp',
'iso2022jp': 'euc-jp',
'shiftjis': 'shift_jis',
}
# Build priority list: chardet-hinted codec first, then remaining CJK
base_order = ["gb18030", "big5", "euc-kr", "euc-jp"]
base_order = ['gb18030', 'big5', 'euc-kr', 'euc-jp']
hinted = _ENC_FAMILY.get(detected_enc)
if hinted and hinted in base_order:
ordered = [hinted] + [e for e in base_order if e != hinted]
@@ -321,10 +321,10 @@ class Loader:
text = raw.decode(enc)
if text.strip() and self._has_cjk_characters(text):
log.info(
"Detected encoding %s for %s (chardet guessed %s)",
'Detected encoding %s for %s (chardet guessed %s)',
enc,
file_path,
detected.get("encoding"),
detected.get('encoding'),
)
return enc
except (UnicodeDecodeError, LookupError):
@@ -332,12 +332,12 @@ class Loader:
# If chardet gave a non-CJK answer that isn't in our family map,
# try it directly — it might be a valid Western encoding.
chardet_encoding = detected.get("encoding")
chardet_encoding = detected.get('encoding')
if chardet_encoding:
try:
raw.decode(chardet_encoding)
log.info(
"Using chardet-detected encoding %s for %s",
'Using chardet-detected encoding %s for %s',
chardet_encoding,
file_path,
)
@@ -348,8 +348,8 @@ class Loader:
# latin-1 is the ultimate fallback: every byte 0x000xFF is valid.
# ftfy.fix_text() (applied downstream) repairs most mojibake that
# results from treating Windows-1252 content as Latin-1.
log.info("Falling back to latin-1 encoding for %s", file_path)
return "latin-1"
log.info('Falling back to latin-1 encoding for %s', file_path)
return 'latin-1'
@staticmethod
def _has_cjk_characters(text: str, threshold: float = 0.05) -> bool:
@@ -371,17 +371,17 @@ class Loader:
total += 1
cp = ord(ch)
if (
0x4E00 <= cp <= 0x9FFF # CJK Unified Ideographs
or 0x3400 <= cp <= 0x4DBF # CJK Extension A
or 0x20000 <= cp <= 0x2A6DF # CJK Extension B
or 0x2A700 <= cp <= 0x2B73F # CJK Extension C
or 0x2B740 <= cp <= 0x2B81F # CJK Extension D
or 0xF900 <= cp <= 0xFAFF # CJK Compatibility Ideographs
or 0x3000 <= cp <= 0x303F # CJK Symbols and Punctuation
or 0x3040 <= cp <= 0x309F # Hiragana
or 0x30A0 <= cp <= 0x30FF # Katakana
or 0xAC00 <= cp <= 0xD7AF # Hangul Syllables
or 0xFF00 <= cp <= 0xFFEF # Halfwidth and Fullwidth Forms
0x4E00 <= cp <= 0x9FFF # CJK Unified Ideographs
or 0x3400 <= cp <= 0x4DBF # CJK Extension A
or 0x20000 <= cp <= 0x2A6DF # CJK Extension B
or 0x2A700 <= cp <= 0x2B73F # CJK Extension C
or 0x2B740 <= cp <= 0x2B81F # CJK Extension D
or 0xF900 <= cp <= 0xFAFF # CJK Compatibility Ideographs
or 0x3000 <= cp <= 0x303F # CJK Symbols and Punctuation
or 0x3040 <= cp <= 0x309F # Hiragana
or 0x30A0 <= cp <= 0x30FF # Katakana
or 0xAC00 <= cp <= 0xD7AF # Hangul Syllables
or 0xFF00 <= cp <= 0xFFEF # Halfwidth and Fullwidth Forms
):
cjk_count += 1
@@ -646,4 +646,3 @@ class Loader:
loader = TextLoader(file_path, encoding=self._detect_text_encoding(file_path))
return loader
+5 -10
View File
@@ -933,6 +933,7 @@ def get_embedding_function(
'SentenceTransformer model name, or configure an external '
'RAG_EMBEDDING_ENGINE (ollama, openai, azure_openai).'
)
# Sentence transformers: CPU-bound sync operation
async def async_embedding_function(query, prefix=None, user=None):
return await asyncio.to_thread(
@@ -1108,8 +1109,7 @@ async def filter_accessible_collections(
rejected = collection_names - safe_names
if rejected:
log.warning(
'filter_accessible_collections: rejected %d collection name(s) '
'with unsafe characters (user_id=%s)',
'filter_accessible_collections: rejected %d collection name(s) with unsafe characters (user_id=%s)',
len(rejected),
getattr(user, 'id', '<unknown>'),
)
@@ -1363,10 +1363,7 @@ async def get_sources_from_items(
files = await Knowledges.get_files_by_id(knowledge_base.id)
owned_names = {f'file-{f.id}' for f in files}
owned_names.add(knowledge_base.id)
valid_names = [
n for n in (item.get('collection_names') or [])
if n in owned_names
]
valid_names = [n for n in (item.get('collection_names') or []) if n in owned_names]
collection_names = valid_names if valid_names else [knowledge_base.id]
else:
collection_names.append(item['id'])
@@ -1382,8 +1379,7 @@ async def get_sources_from_items(
collection_names.append(item['collection_name'])
else:
log.debug(
"get_sources_from_items: ignoring untrusted direct "
"collection_name '%s' on item without type",
"get_sources_from_items: ignoring untrusted direct collection_name '%s' on item without type",
item.get('collection_name'),
)
elif item.get('collection_names'):
@@ -1391,8 +1387,7 @@ async def get_sources_from_items(
collection_names.extend(item['collection_names'])
else:
log.debug(
"get_sources_from_items: ignoring untrusted direct "
"collection_names on item without type",
'get_sources_from_items: ignoring untrusted direct collection_names on item without type',
)
# If query_result is None
@@ -284,9 +284,7 @@ class MilvusClient(VectorDBBase):
elif isinstance(value, (int, float)):
expr.append(f"metadata['{key}'] == {value}")
else:
raise TypeError(
f'Unsupported Milvus filter value type for key {key!r}: {type(value).__name__}'
)
raise TypeError(f'Unsupported Milvus filter value type for key {key!r}: {type(value).__name__}')
iterator = collection.query_iterator(
expr=' and '.join(expr),
@@ -56,8 +56,7 @@ def _import_glide():
)
except ImportError as e:
raise ImportError(
'valkey-glide-sync is required when VECTOR_DB=valkey. '
'Install it with: pip install valkey-glide-sync==2.3.1'
'valkey-glide-sync is required when VECTOR_DB=valkey. Install it with: pip install valkey-glide-sync==2.3.1'
) from e
return {
'Batch': Batch,
@@ -193,7 +192,7 @@ class ValkeyClient(VectorDBBase):
addresses=[NodeAddress(host=host, port=port)],
database_id=db if db else None,
request_timeout=5000,
client_name="open_webui_vector_store_client",
client_name='open_webui_vector_store_client',
)
try:
self.client = GlideClient.create(config)
@@ -206,7 +205,7 @@ class ValkeyClient(VectorDBBase):
addresses=[NodeAddress(host=host, port=port)],
database_id=db if db else None,
request_timeout=10000, # 10s — HNSW indexing can take 1-4s per vector
client_name="open_webui_vector_store_batch_client",
client_name='open_webui_vector_store_batch_client',
)
try:
self.batch_client = GlideClient.create(batch_config)
+1 -3
View File
@@ -66,9 +66,7 @@ def main():
results = search_bing(
os.environ.get('BING_SEARCH_V7_SUBSCRIPTION_KEY', ''),
os.environ.get(
'BING_SEARCH_V7_ENDPOINT', 'https://api.bing.microsoft.com/v7.0/search'
),
os.environ.get('BING_SEARCH_V7_ENDPOINT', 'https://api.bing.microsoft.com/v7.0/search'),
args.locale,
args.query,
args.count,
+1 -3
View File
@@ -51,9 +51,7 @@ def search_linkup(
output_type = merged.get('outputType', 'sourcedAnswer')
search_results = (
json_response.get('sources', [])
if output_type == 'sourcedAnswer'
else json_response.get('results', [])
json_response.get('sources', []) if output_type == 'sourcedAnswer' else json_response.get('results', [])
)
if filter_list:
+85 -56
View File
@@ -72,7 +72,6 @@ SPEECH_CACHE_DIR = CACHE_DIR / 'audio' / 'speech'
SPEECH_CACHE_DIR.mkdir(parents=True, exist_ok=True)
def is_audio_conversion_required(file_path):
"""
Check if the given audio file needs conversion to mp3.
@@ -307,8 +306,6 @@ async def update_audio_config(request: Request, form_data: AudioConfigUpdateForm
else:
request.app.state.faster_whisper_model = None
return {
'tts': {
'ENGINE': request.app.state.config.TTS_ENGINE,
@@ -377,7 +374,10 @@ async def _raise_tts_error(exc: Exception, r=None) -> None:
async def _write_tts_cache(
file_path: Path, audio: bytes, body_path: Path, payload: dict,
file_path: Path,
audio: bytes,
body_path: Path,
payload: dict,
) -> None:
"""Persist audio + request metadata to the speech cache."""
async with aiofiles.open(file_path, 'wb') as f:
@@ -405,16 +405,16 @@ async def _tts_openai(request, payload, file_path, file_body_path, user):
session = await get_session()
r = await session.post(
url=f'{request.app.state.config.TTS_OPENAI_API_BASE_URL}/audio/speech',
json=payload, headers=headers, ssl=AIOHTTP_CLIENT_SESSION_SSL,
json=payload,
headers=headers,
ssl=AIOHTTP_CLIENT_SESSION_SSL,
)
r.raise_for_status()
audio_data = await r.read()
content_type = r.headers.get('Content-Type', 'audio/mpeg')
if not await asyncio.to_thread(
transcode_audio_to_mp3, audio_data, content_type, file_path
):
if not await asyncio.to_thread(transcode_audio_to_mp3, audio_data, content_type, file_path):
async with aiofiles.open(file_path, 'wb') as f:
await f.write(audio_data)
@@ -595,9 +595,7 @@ async def speech(request: Request, user=Depends(get_verified_user)):
body = await request.body()
name = hashlib.sha256(
body
+ str(engine).encode('utf-8')
+ str(request.app.state.config.TTS_MODEL).encode('utf-8')
body + str(engine).encode('utf-8') + str(request.app.state.config.TTS_MODEL).encode('utf-8')
).hexdigest()
file_path = SPEECH_CACHE_DIR.joinpath(f'{name}.mp3')
@@ -628,8 +626,11 @@ async def _transcribe_whisper(request, file_path, languages, file_dir, id):
def _run():
segments, info = model.transcribe(
file_path, beam_size=5, vad_filter=WHISPER_VAD_FILTER,
language=languages[0], multilingual=WHISPER_MULTILINGUAL,
file_path,
beam_size=5,
vad_filter=WHISPER_VAD_FILTER,
language=languages[0],
multilingual=WHISPER_MULTILINGUAL,
)
log.info("Detected language '%s' with probability %f" % (info.language, info.language_probability))
return ''.join([segment.text for segment in list(segments)])
@@ -665,7 +666,9 @@ async def _transcribe_openai(request, file_path, filename, languages, file_dir,
r = await session.post(
url=f'{request.app.state.config.STT_OPENAI_API_BASE_URL}/audio/transcriptions',
headers=headers, data=form_data, ssl=AIOHTTP_CLIENT_SESSION_SSL,
headers=headers,
data=form_data,
ssl=AIOHTTP_CLIENT_SESSION_SSL,
)
if r.status == 200:
break
@@ -724,11 +727,7 @@ async def _transcribe_deepgram(request, file_path, languages, file_dir, id):
# Parse the Deepgram response structure
try:
transcript = (
body['results']['channels'][0]['alternatives'][0]
.get('transcript', '')
.strip()
)
transcript = body['results']['channels'][0]['alternatives'][0].get('transcript', '').strip()
except (KeyError, IndexError) as exc:
log.error(f'Malformed Deepgram response: {exc}')
raise Exception('Failed to parse Deepgram response') from exc
@@ -744,7 +743,11 @@ async def _transcribe_deepgram(request, file_path, languages, file_dir, id):
if r is not None:
try:
res = await r.json()
msg = res.get('error', {}).get('message', '') if isinstance(res.get('error'), dict) else str(res.get('error', ''))
msg = (
res.get('error', {}).get('message', '')
if isinstance(res.get('error'), dict)
else str(res.get('error', ''))
)
if msg:
detail = f'External: {msg}'
except Exception:
@@ -752,7 +755,6 @@ async def _transcribe_deepgram(request, file_path, languages, file_dir, id):
raise Exception(detail)
async def _transcribe_azure(request, file_path, filename, file_dir, id):
"""Transcribe audio via Azure Cognitive Services batch transcription."""
if not os.path.isfile(file_path):
@@ -762,7 +764,7 @@ async def _transcribe_azure(request, file_path, filename, file_dir, id):
if audio_size > AZURE_MAX_FILE_SIZE:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail=f'File size ({audio_size // (1024*1024)}MB) exceeds Azure limit of {AZURE_MAX_FILE_SIZE_MB}MB',
detail=f'File size ({audio_size // (1024 * 1024)}MB) exceeds Azure limit of {AZURE_MAX_FILE_SIZE_MB}MB',
)
api_key = request.app.state.config.AUDIO_STT_AZURE_API_KEY
@@ -773,11 +775,23 @@ async def _transcribe_azure(request, file_path, filename, file_dir, id):
# Default to a broad set of locales when none are configured
if len(locale_str) < 2:
locale_str = ','.join([
'en-US', 'es-ES', 'es-MX', 'fr-FR', 'hi-IN',
'it-IT', 'de-DE', 'en-GB', 'en-IN', 'ja-JP',
'ko-KR', 'pt-BR', 'zh-CN',
])
locale_str = ','.join(
[
'en-US',
'es-ES',
'es-MX',
'fr-FR',
'hi-IN',
'it-IT',
'de-DE',
'en-GB',
'en-IN',
'ja-JP',
'ko-KR',
'pt-BR',
'zh-CN',
]
)
if not api_key or not region:
raise HTTPException(status_code=400, detail='Azure API key and region are required for Azure STT')
@@ -785,7 +799,8 @@ async def _transcribe_azure(request, file_path, filename, file_dir, id):
# Build the transcription definition payload
definition = json.dumps(
{'locales': locale_str.split(','), 'diarization': {'maxSpeakers': max_speakers, 'enabled': True}}
if locale_str else {}
if locale_str
else {}
)
endpoint = (
base_url or f'https://{region}.api.cognitive.microsoft.com'
@@ -799,7 +814,8 @@ async def _transcribe_azure(request, file_path, filename, file_dir, id):
try:
session = await get_session()
r = await session.post(
url=endpoint, data=form_data,
url=endpoint,
data=form_data,
headers={'Ocp-Apim-Subscription-Key': api_key},
ssl=AIOHTTP_CLIENT_SESSION_SSL,
)
@@ -833,8 +849,10 @@ async def _transcribe_azure(request, file_path, filename, file_dir, id):
if 'code' in res and 'message' in res:
azure_code = res.get('innerError', {}).get('code', res['code'])
user_facing_codes = {
'EmptyAudioFile', 'AudioLengthLimitExceeded',
'NoLanguageIdentified', 'MultipleLanguagesIdentified',
'EmptyAudioFile',
'AudioLengthLimitExceeded',
'NoLanguageIdentified',
'MultipleLanguagesIdentified',
}
if azure_code in user_facing_codes:
detail = res['message']
@@ -851,7 +869,6 @@ async def _transcribe_azure(request, file_path, filename, file_dir, id):
)
async def transcription_handler(request, file_path, metadata, user=None):
filename = os.path.basename(file_path)
file_dir = os.path.dirname(file_path)
@@ -897,8 +914,7 @@ async def _transcribe_mistral(request, file_path, filename, metadata, file_dir,
try:
model = request.app.state.config.STT_MODEL or 'voxtral-mini-latest'
log.info(
f'Mistral STT - model: {model}, '
f'method: {"chat_completions" if use_chat_completions else "transcriptions"}'
f'Mistral STT - model: {model}, method: {"chat_completions" if use_chat_completions else "transcriptions"}'
)
session = await get_session()
@@ -932,17 +948,20 @@ async def _transcribe_mistral(request, file_path, filename, metadata, file_dir,
payload = {
'model': model,
'messages': [{
'role': 'user',
'content': [
{'type': 'input_audio', 'input_audio': audio_base64},
{'type': 'text', 'text': text_instruction},
],
}],
'messages': [
{
'role': 'user',
'content': [
{'type': 'input_audio', 'input_audio': audio_base64},
{'type': 'text', 'text': text_instruction},
],
}
],
}
r = await session.post(
url=f'{api_base_url}/chat/completions', json=payload,
url=f'{api_base_url}/chat/completions',
json=payload,
headers={'Authorization': f'Bearer {api_key}', 'Content-Type': 'application/json'},
ssl=AIOHTTP_CLIENT_SESSION_SSL,
)
@@ -969,7 +988,8 @@ async def _transcribe_mistral(request, file_path, filename, metadata, file_dir,
form_data.add_field('file', open(file_path, 'rb'), filename=filename, content_type=mime_type)
r = await session.post(
url=f'{api_base_url}/audio/transcriptions', data=form_data,
url=f'{api_base_url}/audio/transcriptions',
data=form_data,
headers={'Authorization': f'Bearer {api_key}'},
ssl=AIOHTTP_CLIENT_SESSION_SSL,
)
@@ -1041,10 +1061,7 @@ async def transcribe(request: Request, file_path: str, metadata: Optional[dict]
results = []
try:
tasks = [
transcription_handler(request, chunk_path, metadata, user)
for chunk_path in chunk_paths
]
tasks = [transcription_handler(request, chunk_path, metadata, user) for chunk_path in chunk_paths]
for coro in asyncio.as_completed(tasks):
try:
results.append(await coro)
@@ -1226,7 +1243,8 @@ async def get_available_models(request: Request) -> list[dict]:
try:
async with session.get(
f'{base_url}/audio/models',
ssl=AIOHTTP_CLIENT_SESSION_SSL, timeout=_timeout,
ssl=AIOHTTP_CLIENT_SESSION_SSL,
timeout=_timeout,
) as resp:
resp.raise_for_status()
data = await resp.json()
@@ -1236,7 +1254,8 @@ async def get_available_models(request: Request) -> list[dict]:
try:
async with session.get(
f'{base_url}/models',
ssl=AIOHTTP_CLIENT_SESSION_SSL, timeout=_timeout,
ssl=AIOHTTP_CLIENT_SESSION_SSL,
timeout=_timeout,
) as resp:
resp.raise_for_status()
data = await resp.json()
@@ -1256,7 +1275,8 @@ async def get_available_models(request: Request) -> list[dict]:
'xi-api-key': request.app.state.config.TTS_API_KEY,
'Content-Type': 'application/json',
},
ssl=AIOHTTP_CLIENT_SESSION_SSL, timeout=_timeout,
ssl=AIOHTTP_CLIENT_SESSION_SSL,
timeout=_timeout,
) as resp:
resp.raise_for_status()
models = await resp.json()
@@ -1274,9 +1294,14 @@ async def get_available_models(request: Request) -> list[dict]:
async def get_models(request: Request, user=Depends(get_verified_user)):
return {'models': await get_available_models(request)}
_OPENAI_DEFAULT_VOICES = {
'alloy': 'alloy', 'echo': 'echo', 'fable': 'fable',
'onyx': 'onyx', 'nova': 'nova', 'shimmer': 'shimmer',
'alloy': 'alloy',
'echo': 'echo',
'fable': 'fable',
'onyx': 'onyx',
'nova': 'nova',
'shimmer': 'shimmer',
}
@@ -1292,7 +1317,8 @@ async def get_available_voices(request) -> dict:
session = await get_session()
async with session.get(
f'{base_url}/audio/voices',
ssl=AIOHTTP_CLIENT_SESSION_SSL, timeout=_timeout,
ssl=AIOHTTP_CLIENT_SESSION_SSL,
timeout=_timeout,
) as resp:
resp.raise_for_status()
data = await resp.json()
@@ -1311,7 +1337,8 @@ async def get_available_voices(request) -> dict:
'xi-api-key': request.app.state.config.TTS_API_KEY,
'Content-Type': 'application/json',
},
ssl=AIOHTTP_CLIENT_SESSION_SSL, timeout=_timeout,
ssl=AIOHTTP_CLIENT_SESSION_SSL,
timeout=_timeout,
) as resp:
resp.raise_for_status()
voices_data = await resp.json()
@@ -1330,7 +1357,8 @@ async def get_available_voices(request) -> dict:
async with session.get(
url,
headers={'Ocp-Apim-Subscription-Key': request.app.state.config.TTS_API_KEY},
ssl=AIOHTTP_CLIENT_SESSION_SSL, timeout=_timeout,
ssl=AIOHTTP_CLIENT_SESSION_SSL,
timeout=_timeout,
) as resp:
resp.raise_for_status()
voices = await resp.json()
@@ -1348,7 +1376,8 @@ async def get_available_voices(request) -> dict:
async with session.get(
f'{api_base_url}/audio/voices',
headers={'Authorization': f'Bearer {api_key}'},
ssl=AIOHTTP_CLIENT_SESSION_SSL, timeout=_timeout,
ssl=AIOHTTP_CLIENT_SESSION_SSL,
timeout=_timeout,
) as resp:
resp.raise_for_status()
voices_data = await resp.json()
+7 -3
View File
@@ -514,9 +514,13 @@ async def delete_all_user_chats(
@router.get('/list/user/{user_id}', response_model=list[ChatTitleIdResponse])
async def get_user_chat_list_by_user_id(
user_id: str, page: int | None = None, query: str | None = None,
order_by: str | None = None, direction: str | None = None,
user=Depends(get_admin_user), db: AsyncSession = Depends(get_async_session),
user_id: str,
page: int | None = None,
query: str | None = None,
order_by: str | None = None,
direction: str | None = None,
user=Depends(get_admin_user),
db: AsyncSession = Depends(get_async_session),
):
"""List chat summaries for a given user (admin-only endpoint)."""
if not ENABLE_ADMIN_CHAT_ACCESS:
+3 -10
View File
@@ -123,9 +123,7 @@ async def process_uploaded_file(
if _is_text_file(file_path):
content_type = 'text/plain'
stt_supported = getattr(
request.app.state.config, 'STT_SUPPORTED_CONTENT_TYPES', []
)
stt_supported = getattr(request.app.state.config, 'STT_SUPPORTED_CONTENT_TYPES', [])
if content_type and strict_match_mime_type(stt_supported, content_type):
# Audio / STT-supported files → transcribe then index
@@ -161,17 +159,12 @@ async def process_uploaded_file(
db=db_session,
)
else:
raise Exception(
f'File type {content_type} is not supported for processing'
)
raise Exception(f'File type {content_type} is not supported for processing')
else:
# Documents, or any file when an external engine is configured
if not content_type:
log.info(
f'File type {file.content_type} is not provided, '
'but trying to process anyway'
)
log.info(f'File type {file.content_type} is not provided, but trying to process anyway')
await process_file(
request,
ProcessFileForm(file_id=file_item.id),
+3 -16
View File
@@ -336,29 +336,16 @@ async def preview_group_access(
return {
'group': {'id': group.id, 'name': group.name},
'models': {
'items': [
{'id': m.id, 'name': m.name}
for m in active_models
if m.id in accessible_model_ids
],
'items': [{'id': m.id, 'name': m.name} for m in active_models if m.id in accessible_model_ids],
'total': len(active_models),
},
'knowledge': {
'items': [
{'id': k.id, 'name': k.name}
for k in all_knowledge
if k.id in accessible_knowledge_ids
],
'items': [{'id': k.id, 'name': k.name} for k in all_knowledge if k.id in accessible_knowledge_ids],
'total': len(all_knowledge),
},
'tools': {
'items': [
{'id': t.id, 'name': t.name}
for t in all_tools
if t.id in accessible_tool_ids
],
'items': [{'id': t.id, 'name': t.name} for t in all_tools if t.id in accessible_tool_ids],
'total': len(all_tools),
},
'permissions': group.permissions or {},
}
+6 -4
View File
@@ -447,6 +447,7 @@ def _is_same_origin(url: str, base_url: str) -> bool:
and comparing the three origin components eliminates those
attack vectors.
"""
def _default_port(scheme: str) -> int:
return 443 if scheme == 'https' else 80
@@ -455,8 +456,7 @@ def _is_same_origin(url: str, base_url: str) -> bool:
return (
parsed.scheme == trusted.scheme
and parsed.hostname == trusted.hostname
and (parsed.port or _default_port(parsed.scheme))
== (trusted.port or _default_port(trusted.scheme))
and (parsed.port or _default_port(parsed.scheme)) == (trusted.port or _default_port(trusted.scheme))
)
@@ -743,7 +743,8 @@ async def image_generations(
headers = {'Authorization': f'Bearer {request.app.state.config.COMFYUI_API_KEY}'}
image_data, content_type = await get_image_data(
image['url'], headers,
image['url'],
headers,
trusted_base_url=request.app.state.config.COMFYUI_BASE_URL,
)
_, url = await upload_image(
@@ -1102,7 +1103,8 @@ async def image_edits(
headers = {'Authorization': f'Bearer {request.app.state.config.IMAGES_EDIT_COMFYUI_API_KEY}'}
image_data, content_type = await get_image_data(
image_url, headers,
image_url,
headers,
trusted_base_url=request.app.state.config.IMAGES_EDIT_COMFYUI_BASE_URL,
)
_, url = await upload_image(
+5 -2
View File
@@ -1336,8 +1336,11 @@ async def add_files_to_knowledge_batch(
dir_map = {form.file_id: form.directory_id for form in new_entries}
for file_id in successful_file_ids:
await Knowledges.add_file_to_knowledge_by_id(
knowledge_id=id, file_id=file_id, user_id=user.id,
directory_id=dir_map.get(file_id), db=db,
knowledge_id=id,
file_id=file_id,
user_id=user.id,
directory_id=dir_map.get(file_id),
db=db,
)
# If there were any errors, include them in the response
+3 -1
View File
@@ -63,7 +63,9 @@ class MemoryUpdateModel(BaseModel):
@router.post('/add', response_model=MemoryModel | None)
async def add_memory(
request: Request, form_data: AddMemoryForm, user=Depends(get_verified_user),
request: Request,
form_data: AddMemoryForm,
user=Depends(get_verified_user),
):
"""Persist a new memory and embed it into the user's vector collection.
+19 -11
View File
@@ -220,8 +220,10 @@ async def get_model_tags(user=Depends(get_verified_user), db: AsyncSession = Dep
@router.post('/create', response_model=ModelModel | None)
async def create_new_model(
request: Request, form_data: ModelForm,
user=Depends(get_verified_user), db: AsyncSession = Depends(get_async_session),
request: Request,
form_data: ModelForm,
user=Depends(get_verified_user),
db: AsyncSession = Depends(get_async_session),
):
"""Create a new workspace model entry."""
if user.role != 'admin' and not await has_permission(
@@ -248,7 +250,8 @@ async def create_new_model(
else:
await _verify_knowledge_file_access(
getattr(form_data.meta, 'knowledge', None) if form_data.meta else None,
user, db,
user,
db,
)
form_data.access_grants = await filter_allowed_access_grants(
@@ -361,13 +364,14 @@ async def import_models(
try:
await _verify_knowledge_file_access(
(model_data.get('meta') or {}).get('knowledge'),
user, db,
user,
db,
)
except HTTPException:
log.warning(
'import_models: user %s skipped model %s '
'(knowledge file access denied)',
user.id, model_id,
'import_models: user %s skipped model %s (knowledge file access denied)',
user.id,
model_id,
)
continue
@@ -634,14 +638,17 @@ async def toggle_model_by_id(id: str, user=Depends(get_verified_user), db: Async
@router.post('/model/update', response_model=ModelModel | None)
async def update_model_by_id(
request: Request, form_data: ModelForm,
user=Depends(get_verified_user), db: AsyncSession = Depends(get_async_session),
request: Request,
form_data: ModelForm,
user=Depends(get_verified_user),
db: AsyncSession = Depends(get_async_session),
):
"""Update a workspace model's configuration."""
model = await Models.get_model_by_id(form_data.id, db=db)
if not model:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED, detail=ERROR_MESSAGES.NOT_FOUND,
status_code=status.HTTP_401_UNAUTHORIZED,
detail=ERROR_MESSAGES.NOT_FOUND,
)
if (
@@ -662,7 +669,8 @@ async def update_model_by_id(
await _verify_knowledge_file_access(
getattr(form_data.meta, 'knowledge', None) if form_data.meta else None,
user, db,
user,
db,
)
form_data.access_grants = await filter_allowed_access_grants(
+19 -36
View File
@@ -338,9 +338,7 @@ async def get_all_models(request: Request, user: UserModel | None = None):
allowed_model_ids = api_config.get('model_ids', [])
if allowed_model_ids and 'models' in response:
response['models'] = [
m for m in response['models'] if m['model'] in allowed_model_ids
]
response['models'] = [m for m in response['models'] if m['model'] in allowed_model_ids]
for m in response.get('models', []):
if prefix_id:
@@ -350,11 +348,7 @@ async def get_all_models(request: Request, user: UserModel | None = None):
if connection_type:
m['connection_type'] = connection_type
models_dict = {
'models': merge_models_lists(
r.get('models', []) if r else None for r in responses
)
}
models_dict = {'models': merge_models_lists(r.get('models', []) if r else None for r in responses)}
# Annotate with expiry info from loaded-model state
try:
@@ -386,7 +380,8 @@ async def get_filtered_models(models, user, db=None):
db=db,
)
return [
m for m in models.get('models', [])
m
for m in models.get('models', [])
if (mi := model_infos.get(m['model'])) and (user.id == mi.user_id or mi.id in accessible_ids)
]
@@ -439,19 +434,13 @@ async def get_ollama_loaded_models(
for idx, response in enumerate(responses):
if not response:
continue
api_config = _resolve_api_config(
request.app.state.config, idx, request.app.state.config.OLLAMA_BASE_URLS[idx]
)
api_config = _resolve_api_config(request.app.state.config, idx, request.app.state.config.OLLAMA_BASE_URLS[idx])
prefix_id = api_config.get('prefix_id')
if prefix_id:
for m in response.get('models', []):
m['model'] = f'{prefix_id}.{m["model"]}'
return {
'models': merge_models_lists(
r.get('models', []) if r else None for r in responses
)
}
return {'models': merge_models_lists(r.get('models', []) if r else None for r in responses)}
@router.get('/api/version')
@@ -472,7 +461,8 @@ async def get_ollama_versions(
tasks = []
for idx, url in enumerate(request.app.state.config.OLLAMA_BASE_URLS):
api_config = request.app.state.config.OLLAMA_API_CONFIGS.get(
str(idx), request.app.state.config.OLLAMA_API_CONFIGS.get(url, {}),
str(idx),
request.app.state.config.OLLAMA_API_CONFIGS.get(url, {}),
)
if api_config.get('enable', True):
tasks.append(send_get_request(f'{url}/api/version', api_config.get('key')))
@@ -799,7 +789,8 @@ async def embed(
url = request.app.state.config.OLLAMA_BASE_URLS[url_idx]
api_config = request.app.state.config.OLLAMA_API_CONFIGS.get(
str(url_idx), request.app.state.config.OLLAMA_API_CONFIGS.get(url, {}),
str(url_idx),
request.app.state.config.OLLAMA_API_CONFIGS.get(url, {}),
)
key = get_api_key(url_idx, url, request.app.state.config.OLLAMA_API_CONFIGS)
@@ -852,7 +843,8 @@ async def embeddings(
url = request.app.state.config.OLLAMA_BASE_URLS[url_idx]
api_config = request.app.state.config.OLLAMA_API_CONFIGS.get(
str(url_idx), request.app.state.config.OLLAMA_API_CONFIGS.get(url, {}),
str(url_idx),
request.app.state.config.OLLAMA_API_CONFIGS.get(url, {}),
)
key = get_api_key(url_idx, url, request.app.state.config.OLLAMA_API_CONFIGS)
@@ -910,7 +902,8 @@ async def generate_completion(
url = request.app.state.config.OLLAMA_BASE_URLS[url_idx]
api_config = request.app.state.config.OLLAMA_API_CONFIGS.get(
str(url_idx), request.app.state.config.OLLAMA_API_CONFIGS.get(url, {}),
str(url_idx),
request.app.state.config.OLLAMA_API_CONFIGS.get(url, {}),
)
prefix_id = api_config.get('prefix_id')
@@ -1027,9 +1020,7 @@ async def generate_chat_completion(
if model_info is not None:
if model_info.base_model_id:
base_model_id = (
request.base_model_id if hasattr(request, 'base_model_id') else model_info.base_model_id
)
base_model_id = request.base_model_id if hasattr(request, 'base_model_id') else model_info.base_model_id
payload['model'] = base_model_id
params = model_info.params.model_dump()
@@ -1331,19 +1322,12 @@ async def get_openai_models(
raw_models = model_list.get('models', [])
now_ts = int(time.time())
models = [
{'id': m['model'], 'object': 'model', 'created': now_ts, 'owned_by': 'openai'}
for m in raw_models
]
models = [{'id': m['model'], 'object': 'model', 'created': now_ts, 'owned_by': 'openai'} for m in raw_models]
if user.role == 'user' and not BYPASS_MODEL_ACCESS_CONTROL:
model_ids = [m['id'] for m in models]
model_infos = {
mi.id: mi for mi in await Models.get_models_by_ids(model_ids, db=db)
}
user_group_ids = {
g.id for g in await Groups.get_groups_by_member_id(user.id, db=db)
}
model_infos = {mi.id: mi for mi in await Models.get_models_by_ids(model_ids, db=db)}
user_group_ids = {g.id for g in await Groups.get_groups_by_member_id(user.id, db=db)}
accessible_ids = await AccessGrants.get_accessible_resource_ids(
user_id=user.id,
resource_type='model',
@@ -1353,8 +1337,7 @@ async def get_openai_models(
db=db,
)
models = [
m for m in models
if (mi := model_infos.get(m['id'])) and (user.id == mi.user_id or mi.id in accessible_ids)
m for m in models if (mi := model_infos.get(m['id'])) and (user.id == mi.user_id or mi.id in accessible_ids)
]
return {'data': models, 'object': 'list'}
+5 -2
View File
@@ -239,8 +239,11 @@ async def get_prompt_by_id(
@router.post('/id/{prompt_id}/update', response_model=PromptModel | None)
async def update_prompt_by_id(
request: Request, prompt_id: str, form_data: PromptForm,
user=Depends(get_verified_user), db: AsyncSession = Depends(get_async_session),
request: Request,
prompt_id: str,
form_data: PromptForm,
user=Depends(get_verified_user),
db: AsyncSession = Depends(get_async_session),
):
"""Update a prompt's content, creating a new history entry if changed."""
prompt = await Prompts.get_prompt_by_id(prompt_id, db=db)
+1 -2
View File
@@ -1314,7 +1314,7 @@ def merge_docs_to_target_size(
prev = result[-1]
if not can_merge_chunks(prev, chunk):
return False
merged = f"{prev.page_content}\n\n{content}"
merged = f'{prev.page_content}\n\n{content}'
if measure(merged) > max_size:
return False
result[-1] = Document(page_content=merged, metadata={**prev.metadata})
@@ -2211,7 +2211,6 @@ async def search_web(request: Request, engine: str, query: str, user=None) -> li
raise Exception('No search engine API key found in environment variables')
@router.post('/process/web/search')
async def process_web_search(request: Request, form_data: SearchForm, user=Depends(get_verified_user)):
if not request.app.state.config.ENABLE_WEB_SEARCH:
+11 -5
View File
@@ -324,8 +324,10 @@ async def export_tools(
@router.post('/create', response_model=ToolResponse | None)
async def create_new_tools(
request: Request, form_data: ToolForm,
user=Depends(get_verified_user), db: AsyncSession = Depends(get_async_session),
request: Request,
form_data: ToolForm,
user=Depends(get_verified_user),
db: AsyncSession = Depends(get_async_session),
):
"""Create a new tool from user-supplied Python source code."""
if user.role != 'admin' and not (
@@ -448,14 +450,18 @@ async def get_tools_by_id(id: str, user=Depends(get_verified_user), db: AsyncSes
@router.post('/id/{id}/update', response_model=ToolModel | None)
async def update_tools_by_id(
request: Request, id: str, form_data: ToolForm,
user=Depends(get_verified_user), db: AsyncSession = Depends(get_async_session),
request: Request,
id: str,
form_data: ToolForm,
user=Depends(get_verified_user),
db: AsyncSession = Depends(get_async_session),
):
"""Update an existing tool's source code and metadata."""
tools = await Tools.get_tool_by_id(id, db=db)
if not tools:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED, detail=ERROR_MESSAGES.NOT_FOUND,
status_code=status.HTTP_401_UNAUTHORIZED,
detail=ERROR_MESSAGES.NOT_FOUND,
)
# Is the user the original creator, in a group with write access, or an admin
+9 -17
View File
@@ -384,7 +384,9 @@ async def get_user_info_by_session_user(user=Depends(get_verified_user), db: Asy
@router.post('/user/info/update', response_model=dict | None)
async def update_user_info_by_session_user( # PATCH-style merge
form_data: dict, user=Depends(get_verified_user), db: AsyncSession = Depends(get_async_session),
form_data: dict,
user=Depends(get_verified_user),
db: AsyncSession = Depends(get_async_session),
):
"""Merge caller-supplied fields into the current user's info dict.
@@ -401,6 +403,7 @@ async def update_user_info_by_session_user( # PATCH-style merge
)
return updated.info
############################
# GetUserById
############################
@@ -538,7 +541,8 @@ async def get_user_active_status_by_id(
@router.post('/{user_id}/update', response_model=UserModel | None)
async def update_user_by_id(
user_id: str, form_data: UserUpdateForm,
user_id: str,
form_data: UserUpdateForm,
session_user: UserModel = Depends(get_admin_user),
db: AsyncSession = Depends(get_async_session),
):
@@ -743,27 +747,15 @@ async def get_user_preview(
'user': {'id': target_user.id, 'name': target_user.name},
'groups': [{'id': g.id, 'name': g.name} for g in user_groups],
'models': {
'items': [
{'id': m.id, 'name': m.name}
for m in active_models
if m.id in accessible_model_ids
],
'items': [{'id': m.id, 'name': m.name} for m in active_models if m.id in accessible_model_ids],
'total': len(active_models),
},
'knowledge': {
'items': [
{'id': k.id, 'name': k.name}
for k in all_knowledge
if k.id in accessible_knowledge_ids
],
'items': [{'id': k.id, 'name': k.name} for k in all_knowledge if k.id in accessible_knowledge_ids],
'total': len(all_knowledge),
},
'tools': {
'items': [
{'id': t.id, 'name': t.name}
for t in all_tools
if t.id in accessible_tool_ids
],
'items': [{'id': t.id, 'name': t.name} for t in all_tools if t.id in accessible_tool_ids],
'total': len(all_tools),
},
}
+4 -4
View File
@@ -9,7 +9,9 @@ import uuid
import pycrdt as Y
from open_webui.utils.redis import get_redis_connection
from open_webui.env import REDIS_KEY_PREFIX
YDOC_KEY_PREFIX = f"{REDIS_KEY_PREFIX}:ydoc:documents"
YDOC_KEY_PREFIX = f'{REDIS_KEY_PREFIX}:ydoc:documents'
class RedisLock:
"""Distributed lock backed by a Redis SET with NX/EX semantics."""
@@ -105,9 +107,7 @@ class RedisDict:
# this process wrote. The check is per-instance (not distributed), but
# still eliminates the majority of redundant writes because each pod
# typically produces the same model list on consecutive refreshes.
signature = hashlib.sha256(
json.dumps(serialized, sort_keys=True).encode()
).hexdigest()
signature = hashlib.sha256(json.dumps(serialized, sort_keys=True).encode()).hexdigest()
if signature == self._last_signature:
return
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+8 -6
View File
@@ -50,23 +50,25 @@ MAX_KNOWLEDGE_BASE_SEARCH_ITEMS = 10_000
async def _has_read_access_to_file(
file, user_id: str, user_role: str,
file,
user_id: str,
user_role: str,
model_knowledge: Optional[list[dict]] = None,
) -> bool:
"""Check if a user can read a file via ownership, admin role, model attachment, or access grants."""
if file.user_id == user_id or user_role == 'admin':
return True
if model_knowledge and any(
item.get('type') == 'file' and item.get('id') == file.id
for item in model_knowledge
):
if model_knowledge and any(item.get('type') == 'file' and item.get('id') == file.id for item in model_knowledge):
return True
from open_webui.utils.access_control.files import has_access_to_file
return await has_access_to_file(
file_id=file.id, access_type='read',
file_id=file.id,
access_type='read',
user=UserModel(**{'id': user_id, 'role': user_role}),
)
# =============================================================================
# TIME UTILITIES
# =============================================================================
+133 -93
View File
@@ -34,9 +34,16 @@ MAX_GREP_MATCHES = 50
def is_regex_pattern(pattern: str) -> bool:
"""Detect if a pattern looks like regex (\|, .*, .+, \d, \w, \s, [...])."""
return ('\|' in pattern or '.*' in pattern or '.+' in pattern
or '.?' in pattern or '\d' in pattern or '\w' in pattern
or '\s' in pattern or bool(re.search(r'\[.+\]', pattern)))
return (
'\|' in pattern
or '.*' in pattern
or '.+' in pattern
or '.?' in pattern
or '\d' in pattern
or '\w' in pattern
or '\s' in pattern
or bool(re.search(r'\[.+\]', pattern))
)
def normalize_regex(pattern: str) -> str:
@@ -44,8 +51,7 @@ def normalize_regex(pattern: str) -> str:
return pattern.replace('\\|', '|').replace('\|', '|')
def build_matcher(pattern: str, case_insensitive: bool = False,
use_regex: bool = False) -> tuple:
def build_matcher(pattern: str, case_insensitive: bool = False, use_regex: bool = False) -> tuple:
"""Build a matcher function. Returns (match_fn, error_str_or_None)."""
if not use_regex and is_regex_pattern(pattern):
use_regex = True
@@ -157,6 +163,7 @@ async def _build_directory_tree(knowledge_id: str) -> dict:
# Compute full path for each directory
dir_id_to_path = {}
def _get_dir_path(dir_id):
if dir_id in dir_id_to_path:
return dir_id_to_path[dir_id]
@@ -165,7 +172,7 @@ async def _build_directory_tree(knowledge_id: str) -> dict:
return ''
if d['parent_id'] and d['parent_id'] in dir_map:
parent_path = _get_dir_path(d['parent_id'])
path = f"{parent_path}/{d['name']}" if parent_path else d['name']
path = f'{parent_path}/{d["name"]}' if parent_path else d['name']
else:
path = d['name']
dir_id_to_path[dir_id] = path
@@ -180,16 +187,20 @@ async def _build_directory_tree(knowledge_id: str) -> dict:
files = []
for file_model, directory_id in files_with_dirs:
if directory_id and directory_id in dir_id_to_path:
file_path = f"{dir_id_to_path[directory_id]}/{file_model.filename}"
file_path = f'{dir_id_to_path[directory_id]}/{file_model.filename}'
else:
file_path = file_model.filename
files.append({
'id': file_model.id, 'filename': file_model.filename,
'path': file_path, 'directory_id': directory_id,
'size': file_model.meta.get('size') if file_model.meta else None,
'type': file_model.meta.get('content_type') if file_model.meta else None,
'updated_at': file_model.updated_at,
})
files.append(
{
'id': file_model.id,
'filename': file_model.filename,
'path': file_path,
'directory_id': directory_id,
'size': file_model.meta.get('size') if file_model.meta else None,
'type': file_model.meta.get('content_type') if file_model.meta else None,
'updated_at': file_model.updated_at,
}
)
return {
'dirs': dir_map,
@@ -212,10 +223,7 @@ def _get_files_in_dir(tree: dict, dir_id: str | None) -> list[dict]:
def _get_subdirs(tree: dict, parent_id: str | None) -> list[dict]:
"""Get immediate child directories."""
return sorted(
[d for d in tree['dirs'].values() if d['parent_id'] == parent_id],
key=lambda d: d['name']
)
return sorted([d for d in tree['dirs'].values() if d['parent_id'] == parent_id], key=lambda d: d['name'])
def _get_files_under_dir(tree: dict, dir_id: str) -> list[dict]:
@@ -237,8 +245,9 @@ def _get_files_under_dir(tree: dict, dir_id: str) -> list[dict]:
# =============================================================================
async def _get_accessible_kb_ids(user: dict, model_knowledge: list[dict] | None,
knowledge_id: str | None = None) -> list[tuple[str, str, str]]:
async def _get_accessible_kb_ids(
user: dict, model_knowledge: list[dict] | None, knowledge_id: str | None = None
) -> list[tuple[str, str, str]]:
"""Get list of (kb_id, kb_name, kb_description) the user can access."""
from open_webui.models.access_grants import AccessGrants
from open_webui.models.groups import Groups
@@ -249,11 +258,17 @@ async def _get_accessible_kb_ids(user: dict, model_knowledge: list[dict] | None,
user_group_ids = [g.id for g in await Groups.get_groups_by_member_id(user_id)]
async def _has_access(kb):
return (user_role == 'admin' or kb.user_id == user_id
or await AccessGrants.has_access(
user_id=user_id, resource_type='knowledge',
resource_id=kb.id, permission='read',
user_group_ids=set(user_group_ids)))
return (
user_role == 'admin'
or kb.user_id == user_id
or await AccessGrants.has_access(
user_id=user_id,
resource_type='knowledge',
resource_id=kb.id,
permission='read',
user_group_ids=set(user_group_ids),
)
)
result = []
@@ -276,8 +291,10 @@ async def _get_accessible_kb_ids(user: dict, model_knowledge: list[dict] | None,
result.append((kb.id, kb.name, kb.description or ''))
else:
search = await Knowledges.search_knowledge_bases(
user_id, filter={'query': '', 'user_id': user_id, 'group_ids': user_group_ids},
skip=0, limit=50,
user_id,
filter={'query': '', 'user_id': user_id, 'group_ids': user_group_ids},
skip=0,
limit=50,
)
for kb in search.items:
result.append((kb.id, kb.name, kb.description or ''))
@@ -285,8 +302,9 @@ async def _get_accessible_kb_ids(user: dict, model_knowledge: list[dict] | None,
return result
async def _get_accessible_files(user: dict, model_knowledge: list[dict] | None,
knowledge_id: str | None = None) -> list[dict]:
async def _get_accessible_files(
user: dict, model_knowledge: list[dict] | None, knowledge_id: str | None = None
) -> list[dict]:
"""Get all files the user can access, with KB metadata and directory_id (no path computation)."""
from open_webui.models.files import Files
from open_webui.models.knowledge import Knowledges
@@ -297,15 +315,18 @@ async def _get_accessible_files(user: dict, model_knowledge: list[dict] | None,
for kb_id, kb_name, _ in kb_ids:
kb_files = await Knowledges.get_files_with_directory_ids(kb_id)
for file_model, dir_id in kb_files:
files.append({
'id': file_model.id, 'filename': file_model.filename,
'directory_id': dir_id,
'size': file_model.meta.get('size') if file_model.meta else None,
'type': file_model.meta.get('content_type') if file_model.meta else None,
'updated_at': file_model.updated_at,
'knowledge_id': kb_id,
'knowledge_name': kb_name,
})
files.append(
{
'id': file_model.id,
'filename': file_model.filename,
'directory_id': dir_id,
'size': file_model.meta.get('size') if file_model.meta else None,
'type': file_model.meta.get('content_type') if file_model.meta else None,
'updated_at': file_model.updated_at,
'knowledge_id': kb_id,
'knowledge_name': kb_name,
}
)
# Also handle directly attached files (not in any KB)
if model_knowledge:
@@ -316,14 +337,18 @@ async def _get_accessible_files(user: dict, model_knowledge: list[dict] | None,
for fid in attached_file_ids:
f = await Files.get_file_by_id(fid)
if f:
files.append({
'id': f.id, 'filename': f.filename,
'directory_id': None,
'size': f.meta.get('size') if f.meta else None,
'type': f.meta.get('content_type') if f.meta else None,
'updated_at': f.updated_at,
'knowledge_id': None, 'knowledge_name': None,
})
files.append(
{
'id': f.id,
'filename': f.filename,
'directory_id': None,
'size': f.meta.get('size') if f.meta else None,
'type': f.meta.get('content_type') if f.meta else None,
'updated_at': f.updated_at,
'knowledge_id': None,
'knowledge_name': None,
}
)
return files
@@ -374,8 +399,14 @@ async def _resolve_file(ref: str, user: dict, model_knowledge: list[dict] | None
if f and f.data:
if f.id not in accessible_ids:
return None
return {'id': f.id, 'filename': f.filename, 'content': f.data.get('content', ''),
'meta': f.meta, 'updated_at': f.updated_at, 'created_at': f.created_at}
return {
'id': f.id,
'filename': f.filename,
'content': f.data.get('content', ''),
'meta': f.meta,
'updated_at': f.updated_at,
'created_at': f.created_at,
}
# Try path match (e.g. "docs/api/auth.md") — lazy dir walk
ref_clean = ref.strip('/')
@@ -388,15 +419,20 @@ async def _resolve_file(ref: str, user: dict, model_knowledge: list[dict] | None
if dir_id is None:
continue
# Find file with that name in that directory
matches = [fi for fi in accessible
if fi['filename'] == filename and fi['directory_id'] == dir_id]
matches = [fi for fi in accessible if fi['filename'] == filename and fi['directory_id'] == dir_id]
if len(matches) == 1:
f = await Files.get_file_by_id(matches[0]['id'])
if f and f.data:
return {'id': f.id, 'filename': f.filename, 'content': f.data.get('content', ''),
'meta': f.meta, 'updated_at': f.updated_at, 'created_at': f.created_at,
'knowledge_id': matches[0].get('knowledge_id'),
'knowledge_name': matches[0].get('knowledge_name')}
return {
'id': f.id,
'filename': f.filename,
'content': f.data.get('content', ''),
'meta': f.meta,
'updated_at': f.updated_at,
'created_at': f.created_at,
'knowledge_id': matches[0].get('knowledge_id'),
'knowledge_name': matches[0].get('knowledge_name'),
}
# Try filename match within accessible files
matches = [fi for fi in accessible if fi['filename'] == ref]
@@ -404,13 +440,21 @@ async def _resolve_file(ref: str, user: dict, model_knowledge: list[dict] | None
if len(matches) == 1:
f = await Files.get_file_by_id(matches[0]['id'])
if f and f.data:
return {'id': f.id, 'filename': f.filename, 'content': f.data.get('content', ''),
'meta': f.meta, 'updated_at': f.updated_at, 'created_at': f.created_at,
'knowledge_id': matches[0].get('knowledge_id'),
'knowledge_name': matches[0].get('knowledge_name')}
return {
'id': f.id,
'filename': f.filename,
'content': f.data.get('content', ''),
'meta': f.meta,
'updated_at': f.updated_at,
'created_at': f.created_at,
'knowledge_id': matches[0].get('knowledge_id'),
'knowledge_name': matches[0].get('knowledge_name'),
}
elif len(matches) > 1:
return {'error': f'Ambiguous filename "{ref}". Use full path to disambiguate:\n' +
'\n'.join(f" {m['id']} {m['filename']} ({m.get('knowledge_name', 'direct')})" for m in matches)}
return {
'error': f'Ambiguous filename "{ref}". Use full path to disambiguate:\n'
+ '\n'.join(f' {m["id"]} {m["filename"]} ({m.get("knowledge_name", "direct")})' for m in matches)
}
return None
@@ -418,6 +462,7 @@ async def _resolve_file(ref: str, user: dict, model_knowledge: list[dict] | None
async def _get_file_content(file_id: str) -> str | None:
"""Get file content by ID."""
from open_webui.models.files import Files
f = await Files.get_file_by_id(file_id)
if f and f.data:
return f.data.get('content', '')
@@ -429,8 +474,7 @@ async def _get_file_content(file_id: str) -> str | None:
# =============================================================================
async def _kb_ls(args: list[str], flags: set[str], user: dict,
model_knowledge: list[dict] | None) -> str:
async def _kb_ls(args: list[str], flags: set[str], user: dict, model_knowledge: list[dict] | None) -> str:
"""List files and directories. Supports: ls, ls <path>, ls -a (flat)."""
from open_webui.models.knowledge import Knowledges
@@ -506,13 +550,13 @@ def _fmt_size(f: dict) -> str:
def _fmt_date(f: dict) -> str:
if f.get('updated_at'):
from datetime import datetime, timezone
dt = datetime.fromtimestamp(f['updated_at'], tz=timezone.utc)
return dt.strftime('%Y-%m-%d')
return ''
async def _kb_cat(args: list[str], flags: set[str], user: dict,
model_knowledge: list[dict] | None) -> str:
async def _kb_cat(args: list[str], flags: set[str], user: dict, model_knowledge: list[dict] | None) -> str:
"""Read file content. Use -n for line numbers."""
if not args:
return 'Usage: cat [-n] <file_id or filename>'
@@ -542,9 +586,9 @@ async def _kb_cat(args: list[str], flags: set[str], user: dict,
return content
async def _kb_head(args: list[str], flags: set[str], user: dict,
model_knowledge: list[dict] | None,
piped_input: str | None = None) -> str:
async def _kb_head(
args: list[str], flags: set[str], user: dict, model_knowledge: list[dict] | None, piped_input: str | None = None
) -> str:
"""First N lines of a file or piped input."""
n, args = _extract_numeric_flag(args)
if n is None:
@@ -571,9 +615,9 @@ async def _kb_head(args: list[str], flags: set[str], user: dict,
return result
async def _kb_tail(args: list[str], flags: set[str], user: dict,
model_knowledge: list[dict] | None,
piped_input: str | None = None) -> str:
async def _kb_tail(
args: list[str], flags: set[str], user: dict, model_knowledge: list[dict] | None, piped_input: str | None = None
) -> str:
"""Last N lines of a file or piped input."""
n, args = _extract_numeric_flag(args)
if n is None:
@@ -600,9 +644,9 @@ async def _kb_tail(args: list[str], flags: set[str], user: dict,
return result
async def _kb_grep(args: list[str], flags: set[str], user: dict,
model_knowledge: list[dict] | None,
piped_input: str | None = None) -> str:
async def _kb_grep(
args: list[str], flags: set[str], user: dict, model_knowledge: list[dict] | None, piped_input: str | None = None
) -> str:
"""Text search across files or piped input. Supports -E for regex."""
if not args:
return 'Usage: grep [-E] [-i] [-l] [-c] "pattern" [file] [*.ext]'
@@ -684,8 +728,7 @@ async def _kb_grep(args: list[str], flags: set[str], user: dict,
accessible = [f for f in accessible if f['filename'].endswith(f'.{ext_filter}')]
if len(accessible) > MAX_GREP_FILES:
return (f'Too many files ({len(accessible)}). '
f'Scope your search: grep "{pattern}" docs/ or grep "{pattern}" *.py')
return f'Too many files ({len(accessible)}). Scope your search: grep "{pattern}" docs/ or grep "{pattern}" *.py'
from open_webui.models.files import Files
@@ -717,9 +760,7 @@ async def _kb_grep(args: list[str], flags: set[str], user: dict,
if not count_only and not filenames_only:
for line_num, line_text in file_matches:
if len(results) < MAX_GREP_MATCHES:
results.append(
f'{file_info["id"]} {file_info["filename"]}:{line_num}: {line_text.rstrip()}'
)
results.append(f'{file_info["id"]} {file_info["filename"]}:{line_num}: {line_text.rstrip()}')
if count_only:
if not file_match_counts:
@@ -742,8 +783,7 @@ async def _kb_grep(args: list[str], flags: set[str], user: dict,
return output
async def _kb_find(args: list[str], flags: set[str], user: dict,
model_knowledge: list[dict] | None) -> str:
async def _kb_find(args: list[str], flags: set[str], user: dict, model_knowledge: list[dict] | None) -> str:
"""Find files by name/glob pattern, optionally scoped to a directory."""
if not args:
return 'Usage: find "*.md" or find docs/ "*.md"'
@@ -783,9 +823,9 @@ async def _kb_find(args: list[str], flags: set[str], user: dict,
return '\n'.join(lines)
async def _kb_wc(args: list[str], flags: set[str], user: dict,
model_knowledge: list[dict] | None,
piped_input: str | None = None) -> str:
async def _kb_wc(
args: list[str], flags: set[str], user: dict, model_knowledge: list[dict] | None, piped_input: str | None = None
) -> str:
"""Word, line, character counts."""
if piped_input is not None:
lines = piped_input.count('\n') + (1 if piped_input and not piped_input.endswith('\n') else 0)
@@ -814,8 +854,7 @@ async def _kb_wc(args: list[str], flags: set[str], user: dict,
return f' {lines} {words} {chars} {resolved["filename"]}'
async def _kb_stat(args: list[str], flags: set[str], user: dict,
model_knowledge: list[dict] | None) -> str:
async def _kb_stat(args: list[str], flags: set[str], user: dict, model_knowledge: list[dict] | None) -> str:
"""File metadata."""
if not args:
return 'Usage: stat <file>'
@@ -847,10 +886,12 @@ async def _kb_stat(args: list[str], flags: set[str], user: dict,
if resolved.get('created_at'):
from datetime import datetime, timezone
dt = datetime.fromtimestamp(resolved['created_at'], tz=timezone.utc)
out.append(f' Created: {dt.strftime("%Y-%m-%d %H:%M:%S UTC")}')
if resolved.get('updated_at'):
from datetime import datetime, timezone
dt = datetime.fromtimestamp(resolved['updated_at'], tz=timezone.utc)
out.append(f' Updated: {dt.strftime("%Y-%m-%d %H:%M:%S UTC")}')
if resolved.get('knowledge_name'):
@@ -859,20 +900,20 @@ async def _kb_stat(args: list[str], flags: set[str], user: dict,
return '\n'.join(out)
async def _kb_sed(args: list[str], flags: set[str], user: dict,
model_knowledge: list[dict] | None,
piped_input: str | None = None) -> str:
async def _kb_sed(
args: list[str], flags: set[str], user: dict, model_knowledge: list[dict] | None, piped_input: str | None = None
) -> str:
"""Extract line range from a file. Usage: sed -n 'M,Np' <file>"""
if piped_input is not None:
# sed on piped input: parse range from args
start, end = 1, None
if 'n' in flags and args:
m = re.match(r"^(\d+),(\d+)p?$", args[0])
m = re.match(r'^(\d+),(\d+)p?$', args[0])
if m:
start, end = int(m.group(1)), int(m.group(2))
args = args[1:]
lines = piped_input.split('\n')
selected = lines[max(0, start - 1):(end or len(lines))]
selected = lines[max(0, start - 1) : (end or len(lines))]
return '\n'.join(selected)
# Parse: sed -n '40,60p' <file>
@@ -903,7 +944,7 @@ async def _kb_sed(args: list[str], flags: set[str], user: dict,
lines = resolved['content'].split('\n')
total = len(lines)
selected = lines[max(0, start - 1):end]
selected = lines[max(0, start - 1) : end]
result = '\n'.join(selected)
result += f'\n[lines {start}-{min(end, total)} of {total}]'
return result
@@ -914,8 +955,7 @@ async def _kb_sed(args: list[str], flags: set[str], user: dict,
# =============================================================================
async def _kb_tree(args: list[str], flags: set[str], user: dict,
model_knowledge: list[dict] | None) -> str:
async def _kb_tree(args: list[str], flags: set[str], user: dict, model_knowledge: list[dict] | None) -> str:
"""Show directory tree structure."""
kb_ids = await _get_accessible_kb_ids(user, model_knowledge)
if not kb_ids:
+1 -1
View File
@@ -426,7 +426,7 @@ async def get_current_user_by_api_key(request, api_key: str):
allowed_paths = [
path.strip() for path in str(request.app.state.config.API_KEYS_ALLOWED_ENDPOINTS).split(',') if path.strip()
]
request_path = request.scope["path"] # Use raw ASGI path — not spoofable via Host header (CVE-2026-48710)
request_path = request.scope['path'] # Use raw ASGI path — not spoofable via Host header (CVE-2026-48710)
is_allowed = any(request_path == allowed or request_path.startswith(allowed + '/') for allowed in allowed_paths)
if not is_allowed:
raise HTTPException(
+1 -5
View File
@@ -191,11 +191,7 @@ async def get_image_base64_from_file_id(id: str, user=None) -> Optional[str]:
# Owner, admin, and explicit read-grant holders are allowed.
if user is None:
return None
if (
file.user_id != user.id
and user.role != 'admin'
and not await has_access_to_file(file.id, 'read', user)
):
if file.user_id != user.id and user.role != 'admin' and not await has_access_to_file(file.id, 'read', user):
return None
try:
-1
View File
@@ -41,4 +41,3 @@ def get_custom_headers(custom_headers: dict, user=None, metadata: dict = None) -
parsed_headers[key] = value
return parsed_headers
+1 -3
View File
@@ -67,9 +67,7 @@ def _json_sink(message: 'Message') -> None:
log_entry['error'] = {
'type': exc.type.__name__ if exc.type else None,
'message': str(exc.value) if exc.value else None,
'stacktrace': ''.join(
traceback.format_exception(exc.type, exc.value, exc.traceback)
).rstrip(),
'stacktrace': ''.join(traceback.format_exception(exc.type, exc.value, exc.traceback)).rstrip(),
}
sys.stdout.write(json.dumps(log_entry, ensure_ascii=False, default=str) + '\n')
+5 -1
View File
@@ -11,7 +11,11 @@ from mcp import ClientSession
from mcp.client.auth import OAuthClientProvider, TokenStorage
from mcp.client.streamable_http import streamablehttp_client
from mcp.shared.auth import OAuthClientInformationFull, OAuthClientMetadata, OAuthToken
from open_webui.env import AIOHTTP_CLIENT_SESSION_TOOL_SERVER_SSL, AIOHTTP_CLIENT_TIMEOUT_TOOL_SERVER, MCP_INITIALIZE_TIMEOUT
from open_webui.env import (
AIOHTTP_CLIENT_SESSION_TOOL_SERVER_SSL,
AIOHTTP_CLIENT_TIMEOUT_TOOL_SERVER,
MCP_INITIALIZE_TIMEOUT,
)
def _build_httpx_client(headers=None, timeout=None, auth=None, verify=True):
+23 -19
View File
@@ -2257,7 +2257,6 @@ def strip_skill_mentions(messages: list[dict]) -> None:
part['text'] = strip_re.sub(r'\1', text).strip()
async def connect_mcp_server(
request,
server_id: str,
@@ -2271,10 +2270,7 @@ async def connect_mcp_server(
"""
mcp_server_connection = None
for server_connection in request.app.state.config.TOOL_SERVER_CONNECTIONS:
if (
server_connection.get('type', '') == 'mcp'
and server_connection.get('info', {}).get('id') == server_id
):
if server_connection.get('type', '') == 'mcp' and server_connection.get('info', {}).get('id') == server_id:
mcp_server_connection = server_connection
break
@@ -2287,8 +2283,12 @@ async def connect_mcp_server(
return None
headers, _ = await build_tool_server_headers(
mcp_server_connection, request, user,
server_id=server_id, metadata=metadata, extra_params=extra_params,
mcp_server_connection,
request,
user,
server_id=server_id,
metadata=metadata,
extra_params=extra_params,
)
client = MCPClient()
@@ -2297,18 +2297,13 @@ async def connect_mcp_server(
headers=headers if headers else None,
)
function_name_filter_list = mcp_server_connection.get('config', {}).get(
'function_name_filter_list', ''
)
function_name_filter_list = mcp_server_connection.get('config', {}).get('function_name_filter_list', '')
if isinstance(function_name_filter_list, str):
function_name_filter_list = function_name_filter_list.split(',')
tool_specs = await client.list_tool_specs()
if function_name_filter_list:
tool_specs = [
spec for spec in tool_specs
if is_string_allowed(spec['name'], function_name_filter_list)
]
tool_specs = [spec for spec in tool_specs if is_string_allowed(spec['name'], function_name_filter_list)]
return client, tool_specs
@@ -2730,10 +2725,14 @@ async def process_chat_payload(request, form_data, user, metadata, model):
for tool_id in tool_ids:
if tool_id.startswith('server:mcp:'):
try:
server_id = tool_id[len('server:mcp:'):]
server_id = tool_id[len('server:mcp:') :]
result = await connect_mcp_server(
request, server_id, user, metadata, extra_params,
request,
server_id,
user,
metadata,
extra_params,
)
if result is None:
continue
@@ -2742,6 +2741,7 @@ async def process_chat_payload(request, form_data, user, metadata, model):
mcp_clients[server_id] = client
for tool_spec in tool_specs:
async def make_tool_function(client, function_name):
async def tool_function(**kwargs):
return await client.call_tool(
@@ -3392,7 +3392,9 @@ async def outlet_filter_handler(ctx):
if outlet_message_id and outlet_message_id in messages_map:
original_message = messages_map[outlet_message_id]
content_changed = original_message.get('content') != message.get('content')
output_changed = message.get('output') and message.get('output') != original_message.get('output')
output_changed = message.get('output') and message.get('output') != original_message.get(
'output'
)
if content_changed or output_changed:
# If output was modified, re-derive content from it
new_content = message.get('content', original_message.get('content', ''))
@@ -3874,7 +3876,7 @@ async def streaming_chat_response_handler(response, ctx):
# Mirror the five gates from utils/tools.py get_builtin_tools so the
# legacy XML-tag path enforces the same authz as native FC.
features = metadata.get('features', {}) or {}
model_capabilities = (model.get('info', {}).get('meta', {}).get('capabilities') or {})
model_capabilities = model.get('info', {}).get('meta', {}).get('capabilities') or {}
builtin_tools_meta = model.get('info', {}).get('meta', {}).get('builtinTools', {})
DETECT_CODE_INTERPRETER = (
bool(features.get('code_interpreter'))
@@ -4401,7 +4403,9 @@ async def streaming_chat_response_handler(response, ctx):
if end:
break
if ENABLE_REALTIME_CHAT_SAVE and not metadata.get('chat_id', '').startswith('channel:'):
if ENABLE_REALTIME_CHAT_SAVE and not metadata.get('chat_id', '').startswith(
'channel:'
):
# Save message in the database
await Chats.upsert_message_to_chat_by_id_and_message_id(
metadata['chat_id'],
+3 -9
View File
@@ -141,9 +141,7 @@ def reconcile_tool_pairs(messages: list[dict]) -> list[dict]:
Well-formed output is unaffected: every id pairs, so nothing is stripped.
"""
completed_tool_call_ids = {
message['tool_call_id']
for message in messages
if message.get('role') == 'tool' and message.get('tool_call_id')
message['tool_call_id'] for message in messages if message.get('role') == 'tool' and message.get('tool_call_id')
}
requested_tool_call_ids = {
tool_call['id']
@@ -167,9 +165,7 @@ def reconcile_tool_pairs(messages: list[dict]) -> list[dict]:
# Keep only tool_calls whose id received a tool-role response.
valid_tool_calls = [
tool_call
for tool_call in message['tool_calls']
if tool_call.get('id') in completed_tool_call_ids
tool_call for tool_call in message['tool_calls'] if tool_call.get('id') in completed_tool_call_ids
]
if valid_tool_calls:
@@ -181,9 +177,7 @@ def reconcile_tool_pairs(messages: list[dict]) -> list[dict]:
content = message.get('content', '')
has_meaningful_content = content.strip() if isinstance(content, str) else content
if has_meaningful_content or message.get('reasoning_content'):
reconciled_messages.append(
{key: value for key, value in message.items() if key != 'tool_calls'}
)
reconciled_messages.append({key: value for key, value in message.items() if key != 'tool_calls'})
return reconciled_messages
+3 -1
View File
@@ -375,7 +375,9 @@ async def get_protected_resource_metadata(server_url: str) -> ProtectedResourceM
except Exception as e:
log.debug(f'MCP Protected Resource discovery failed: {e}')
return ProtectedResourceMetadata(resource=resource, authorization_servers=authorization_servers, scopes_supported=scopes)
return ProtectedResourceMetadata(
resource=resource, authorization_servers=authorization_servers, scopes_supported=scopes
)
def _build_well_known_urls(server_url: str) -> list[str]:
+32 -37
View File
@@ -29,12 +29,12 @@ from open_webui.env import (
log = logging.getLogger(__name__)
_ACCEPTED_SCHEMES = frozenset({"redis", "rediss"})
_ACCEPTED_SCHEMES = frozenset({'redis', 'rediss'})
_SENTINEL_RETRYABLE = (
_redis_sync.exceptions.ConnectionError,
_redis_sync.exceptions.ReadOnlyError,
)
_FACTORY_METHODS = frozenset({"pipeline", "pubsub", "monitor", "client", "transaction"})
_FACTORY_METHODS = frozenset({'pipeline', 'pubsub', 'monitor', 'client', 'transaction'})
_CONNECTION_POOL: dict[tuple, Any] = {}
@@ -42,17 +42,16 @@ def parse_redis_url(url: str) -> dict[str, Any]:
"""Break a ``redis://`` URL into its parts: service, port, db, username, password."""
parts: ParseResult = urlparse(url)
if parts.scheme not in _ACCEPTED_SCHEMES:
raise ValueError(
f"Invalid Redis URL scheme '{parts.scheme}'; expected 'redis' or 'rediss'."
)
raise ValueError(f"Invalid Redis URL scheme '{parts.scheme}'; expected 'redis' or 'rediss'.")
return {
"service": parts.hostname or "mymaster",
"port": parts.port or 6379,
"db": int(parts.path.lstrip("/") or "0"),
"username": parts.username or None,
"password": parts.password or None,
'service': parts.hostname or 'mymaster',
'port': parts.port or 6379,
'db': int(parts.path.lstrip('/') or '0'),
'username': parts.username or None,
'password': parts.password or None,
}
parse_redis_service_url = parse_redis_url
@@ -64,11 +63,7 @@ def get_sentinels_from_env(
if not hosts_csv:
return []
resolved_port = int(port) if port else 26379
return [
(host.strip(), resolved_port)
for host in hosts_csv.split(",")
if host.strip()
]
return [(host.strip(), resolved_port) for host in hosts_csv.split(',') if host.strip()]
def build_sentinel_url(
@@ -82,13 +77,11 @@ def build_sentinel_url(
``hosts_csv`` is a comma-separated list of sentinel hostnames.
"""
cfg = parse_redis_url(base_url)
auth = ""
if cfg["username"] or cfg["password"]:
auth = f"{cfg['username'] or ''}:{cfg['password'] or ''}@"
nodes = ",".join(
f"{host.strip()}:{port}" for host in hosts_csv.split(",") if host.strip()
)
return f"redis+sentinel://{auth}{nodes}/{cfg['db']}/{cfg['service']}"
auth = ''
if cfg['username'] or cfg['password']:
auth = f'{cfg["username"] or ""}:{cfg["password"] or ""}@'
nodes = ','.join(f'{host.strip()}:{port}' for host in hosts_csv.split(',') if host.strip())
return f'redis+sentinel://{auth}{nodes}/{cfg["db"]}/{cfg["service"]}'
def get_redis_client(async_mode: bool = False) -> Any | None:
@@ -107,7 +100,7 @@ def get_redis_client(async_mode: bool = False) -> Any | None:
async_mode=async_mode,
)
except Exception:
log.debug("Could not establish Redis connection", exc_info=True)
log.debug('Could not establish Redis connection', exc_info=True)
return None
@@ -157,7 +150,7 @@ class SentinelRedisProxy:
def _log_retry(self, exc: Exception, attempt: int) -> None:
log.debug(
"Sentinel failover (%s) — retry %d/%d",
'Sentinel failover (%s) — retry %d/%d',
type(exc).__name__,
attempt + 1,
REDIS_SENTINEL_MAX_RETRY_COUNT,
@@ -165,7 +158,7 @@ class SentinelRedisProxy:
def _log_exhausted(self, exc: Exception) -> None:
log.error(
"Redis operation failed after %d retries: %s",
'Redis operation failed after %d retries: %s',
REDIS_SENTINEL_MAX_RETRY_COUNT,
exc,
)
@@ -254,11 +247,11 @@ def _socket_options() -> dict[str, Any]:
"""Collect optional socket-level kwargs once instead of repeating them."""
opts: dict[str, Any] = {}
if REDIS_SOCKET_CONNECT_TIMEOUT is not None:
opts["socket_connect_timeout"] = REDIS_SOCKET_CONNECT_TIMEOUT
opts['socket_connect_timeout'] = REDIS_SOCKET_CONNECT_TIMEOUT
if REDIS_SOCKET_KEEPALIVE:
opts["socket_keepalive"] = True
opts['socket_keepalive'] = True
if REDIS_HEALTH_CHECK_INTERVAL:
opts["health_check_interval"] = REDIS_HEALTH_CHECK_INTERVAL
opts['health_check_interval'] = REDIS_HEALTH_CHECK_INTERVAL
return opts
@@ -273,15 +266,15 @@ def _build_sentinel(
cfg = parse_redis_url(url)
sentinel = redis_module.sentinel.Sentinel(
sentinels,
port=cfg["port"],
db=cfg["db"],
username=cfg["username"],
password=cfg["password"],
port=cfg['port'],
db=cfg['db'],
username=cfg['username'],
password=cfg['password'],
decode_responses=decode_responses,
socket_connect_timeout=REDIS_SOCKET_CONNECT_TIMEOUT,
**{k: v for k, v in _socket_options().items() if k != "socket_connect_timeout"},
**{k: v for k, v in _socket_options().items() if k != 'socket_connect_timeout'},
)
return SentinelRedisProxy(sentinel, cfg["service"], async_mode=async_mode)
return SentinelRedisProxy(sentinel, cfg['service'], async_mode=async_mode)
def get_redis_connection(
@@ -320,12 +313,14 @@ def get_redis_connection(
connection = _build_sentinel(redis_mod, redis_url, redis_sentinels, decode_responses, async_mode)
elif redis_cluster:
if not redis_url:
raise ValueError("Redis URL is required for cluster mode.")
raise ValueError('Redis URL is required for cluster mode.')
connection = redis_mod.cluster.RedisCluster.from_url(
redis_url, decode_responses=decode_responses, **extra,
redis_url,
decode_responses=decode_responses,
**extra,
)
elif redis_url:
factory = getattr(redis_mod, "from_url", None) or redis_mod.Redis.from_url
factory = getattr(redis_mod, 'from_url', None) or redis_mod.Redis.from_url
connection = factory(redis_url, decode_responses=decode_responses, **extra)
_CONNECTION_POOL[cache_key] = connection
+20 -8
View File
@@ -376,8 +376,12 @@ async def get_tools(request: Request, tool_ids: list[str], user: UserModel, extr
metadata = extra_params.get('__metadata__', {})
headers, cookies = await build_tool_server_headers(
tool_server_connection, request, user,
server_id=server_id, metadata=metadata, extra_params=extra_params,
tool_server_connection,
request,
user,
server_id=server_id,
metadata=metadata,
extra_params=extra_params,
)
headers.setdefault('Content-Type', 'application/json')
@@ -484,7 +488,9 @@ async def get_builtin_tools(
builtin_functions.append(query_knowledge_bases)
builtin_functions.append(search_knowledge_bases)
elif model_knowledge:
builtin_functions.extend([list_knowledge, search_knowledge_files, grep_knowledge_files, query_knowledge_files])
builtin_functions.extend(
[list_knowledge, search_knowledge_files, grep_knowledge_files, query_knowledge_files]
)
knowledge_types = {item.get('type') for item in model_knowledge}
if 'file' in knowledge_types or 'collection' in knowledge_types:
@@ -492,11 +498,17 @@ async def get_builtin_tools(
if 'note' in knowledge_types:
builtin_functions.append(view_note)
else:
builtin_functions.extend([
list_knowledge_bases, search_knowledge_bases, query_knowledge_bases,
grep_knowledge_files, search_knowledge_files, query_knowledge_files,
view_knowledge_file,
])
builtin_functions.extend(
[
list_knowledge_bases,
search_knowledge_bases,
query_knowledge_bases,
grep_knowledge_files,
search_knowledge_files,
query_knowledge_files,
view_knowledge_file,
]
)
# Chats tools - search and fetch user's chat history
if is_builtin_tool_enabled('chats'):
+1 -2
View File
@@ -76,8 +76,7 @@ def validate_profile_image_url(url: str) -> str:
if _SAFE_DATA_URI_RE.match(url):
if PROFILE_IMAGE_MAX_DATA_URI_SIZE and len(url) > PROFILE_IMAGE_MAX_DATA_URI_SIZE:
raise ValueError(
f'Invalid profile image URL: data URI exceeds the '
f'{PROFILE_IMAGE_MAX_DATA_URI_SIZE}-byte limit.'
f'Invalid profile image URL: data URI exceeds the {PROFILE_IMAGE_MAX_DATA_URI_SIZE}-byte limit.'
)
return url
@@ -81,9 +81,10 @@
// Convert Linkup params JSON string to object before sending
const linkupParams =
typeof webConfig.LINKUP_SEARCH_PARAMS === 'string' && webConfig.LINKUP_SEARCH_PARAMS.trim() !== ''
typeof webConfig.LINKUP_SEARCH_PARAMS === 'string' &&
webConfig.LINKUP_SEARCH_PARAMS.trim() !== ''
? JSON.parse(webConfig.LINKUP_SEARCH_PARAMS)
: webConfig.LINKUP_SEARCH_PARAMS ?? {};
: (webConfig.LINKUP_SEARCH_PARAMS ?? {});
const res = await updateRAGConfig(localStorage.token, {
web: { ...webConfig, LINKUP_SEARCH_PARAMS: linkupParams }
@@ -135,7 +136,7 @@
webConfig.LINKUP_SEARCH_PARAMS =
typeof webConfig.LINKUP_SEARCH_PARAMS === 'object'
? JSON.stringify(webConfig.LINKUP_SEARCH_PARAMS ?? {}, null, 2)
: webConfig.LINKUP_SEARCH_PARAMS ?? '';
: (webConfig.LINKUP_SEARCH_PARAMS ?? '');
}
});
</script>
@@ -261,7 +261,6 @@
<td class=" px-3 py-1">
{dayjs(user.last_active_at * 1000).fromNow()}
</td>
</tr>
{/each}
</tbody>
+23 -19
View File
@@ -438,24 +438,24 @@
}}
>
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
class="w-4 h-4"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M2.036 12.322a1.012 1.012 0 0 1 0-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178Z"
/>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"
/>
</svg>
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
class="w-4 h-4"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M2.036 12.322a1.012 1.012 0 0 1 0-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178Z"
/>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"
/>
</svg>
</button>
</Tooltip>
{/if}
@@ -555,5 +555,9 @@
{/if}
{#if selectedUser}
<UserPreviewModal bind:show={showUserPreviewModal} userId={selectedUser.id} userName={selectedUser.name} />
<UserPreviewModal
bind:show={showUserPreviewModal}
userId={selectedUser.id}
userName={selectedUser.name}
/>
{/if}
@@ -24,13 +24,14 @@
? $models.find((m) => m.id === model_id)?.name || model_id
: $i18n.t('Select model');
$: filteredModels = (modelSearch
? $models.filter(
(m) =>
m.name.toLowerCase().includes(modelSearch.toLowerCase()) ||
m.id.toLowerCase().includes(modelSearch.toLowerCase())
)
: $models
$: filteredModels = (
modelSearch
? $models.filter(
(m) =>
m.name.toLowerCase().includes(modelSearch.toLowerCase()) ||
m.id.toLowerCase().includes(modelSearch.toLowerCase())
)
: $models
).filter((m) => !(m?.info?.meta?.hidden ?? false));
</script>
-1
View File
@@ -184,7 +184,6 @@
let files = [];
let params = {};
$: if (chatIdProp) {
navigateHandler();
}
@@ -230,7 +230,8 @@
{id}
content={model?.info?.meta?.capabilities?.citations == false
? replaceOutsideCode(content, (segment) =>
segment.replace(/\s*(\[(?:\d+(?:#[^,\]\s]+)?(?:,\s*\d+(?:#[^,\]\s]+)?)*)\])+/g, ''))
segment.replace(/\s*(\[(?:\d+(?:#[^,\]\s]+)?(?:,\s*\d+(?:#[^,\]\s]+)?)*)\])+/g, '')
)
: content}
{model}
{save}
+7 -1
View File
@@ -169,7 +169,13 @@
on:resize={positionContent}
/>
<span use:trigger style="display: contents; cursor: pointer;" role="button" aria-haspopup="true" aria-expanded={show}>
<span
use:trigger
style="display: contents; cursor: pointer;"
role="button"
aria-haspopup="true"
aria-expanded={show}
>
<slot />
</span>
@@ -368,7 +368,9 @@
// For the active chat, prefer the live dropdown selection.
if (id === $chatId) {
try { model = JSON.parse(sessionStorage.selectedModels || '[]').find((m) => m) ?? ''; } catch {}
try {
model = JSON.parse(sessionStorage.selectedModels || '[]').find((m) => m) ?? '';
} catch {}
}
if (!model && history?.messages && history?.currentId) {
@@ -1117,7 +1117,10 @@
onDestroy(() => {
clearTimeout(searchDebounceTimer);
if (pendingPollTimer) { clearInterval(pendingPollTimer); pendingPollTimer = null; }
if (pendingPollTimer) {
clearInterval(pendingPollTimer);
pendingPollTimer = null;
}
mediaQuery?.removeEventListener('change', handleMediaQuery);
const dropZone = document.querySelector('body');
dropZone?.removeEventListener('dragover', onDragOver);
@@ -1125,7 +1128,6 @@
dropZone?.removeEventListener('dragleave', onDragLeave);
});
const decodeString = (str: string) => {
try {
return decodeURIComponent(str);
@@ -64,10 +64,7 @@
: 'hover:bg-gray-100 dark:hover:bg-gray-850'}"
draggable="true"
on:dragstart={(e) => {
e.dataTransfer?.setData(
'application/x-kb-dir-move',
JSON.stringify({ dirId: directory.id })
);
e.dataTransfer?.setData('application/x-kb-dir-move', JSON.stringify({ dirId: directory.id }));
}}
on:dblclick={() => {
if (writeAccess) startRename();
@@ -83,10 +83,7 @@
on:dragstart={(e) => {
const fileId = file?.id ?? file?.tempId;
if (fileId) {
e.dataTransfer?.setData(
'application/x-kb-file-move',
JSON.stringify({ fileId })
);
e.dataTransfer?.setData('application/x-kb-file-move', JSON.stringify({ fileId }));
}
}}
>
@@ -61,9 +61,7 @@
{breadcrumbs.length === 0
? 'text-gray-700 dark:text-gray-300'
: 'text-gray-400 dark:text-gray-500 hover:text-gray-600 dark:hover:text-gray-400'}
{dragOverCrumb === -1
? 'bg-gray-100 dark:bg-gray-800 rounded-lg'
: ''}"
{dragOverCrumb === -1 ? 'bg-gray-100 dark:bg-gray-800 rounded-lg' : ''}"
on:click={() => onNavigate(null)}
on:dragover={(e) => handleDragOver(e, -1)}
on:dragleave={() => handleDragLeave(-1)}
@@ -79,9 +77,7 @@
{i === breadcrumbs.length - 1
? 'text-gray-700 dark:text-gray-300'
: 'text-gray-400 dark:text-gray-500 hover:text-gray-600 dark:hover:text-gray-400'}
{dragOverCrumb === i
? 'bg-gray-100 dark:bg-gray-800 rounded-lg'
: ''}"
{dragOverCrumb === i ? 'bg-gray-100 dark:bg-gray-800 rounded-lg' : ''}"
on:click={() => onNavigate(crumb.id)}
on:dragover={(e) => handleDragOver(e, i)}
on:dragleave={() => handleDragLeave(i)}
@@ -15,9 +15,7 @@
$: filteredSkillKeys = Object.keys(_skills).filter((id) => {
if (!searchQuery.trim()) return true;
const q = searchQuery.toLowerCase();
return (
_skills[id].name?.toLowerCase().includes(q) || _skills[id].id?.toLowerCase().includes(q)
);
return _skills[id].name?.toLowerCase().includes(q) || _skills[id].id?.toLowerCase().includes(q);
});
onMount(() => {
+60 -5
View File
@@ -9,12 +9,25 @@
"[Today at] h:mm A": "",
"[Yesterday at] h:mm A": "",
"{{ models }}": "{{ نماذج }}",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "",
"{{COUNT}} characters": "",
"{{COUNT}} extracted lines": "",
"{{COUNT}} files": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_zero": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_two": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_few": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_many": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "",
"{{COUNT}} members": "",
"{{count}} of {{total}} accessible_zero": "",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_two": "",
"{{count}} of {{total}} accessible_few": "",
"{{count}} of {{total}} accessible_many": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "",
"{{COUNT}} Rows": "",
"{{count}} selected_zero": "",
@@ -197,6 +210,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "",
"Are you sure you want to delete this channel?": "",
"Are you sure you want to delete this connection? This action cannot be undone.": "",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "",
"Are you sure you want to delete this message?": "",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "",
@@ -243,6 +257,7 @@
"Automations": "",
"Available list": "",
"Available models": "",
"Available Skills": "",
"Available Tools": "",
"available users": "المستخدمون المتاحون",
"available!": "متاح",
@@ -402,13 +417,21 @@
"ComfyUI Workflow": "",
"ComfyUI Workflow Nodes": "",
"Comma separated Node Ids (e.g. 1 or 1,2)": "",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "",
"Command": "الأوامر",
"Comment": "",
"Commit Message": "",
"Community Reviews": "",
"Comparing with knowledge base...": "",
"Completions": "",
"Compress Images in Channels": "",
"Computing checksums ({{count}} files)_zero": "",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_two": "",
"Computing checksums ({{count}} files)_few": "",
"Computing checksums ({{count}} files)_many": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "الطلبات المتزامنة",
"Config": "",
"Config imported successfully": "",
@@ -541,12 +564,14 @@
"Delete a model": "حذف الموديل",
"Delete All": "",
"Delete All Chats": "حذف جميع الدردشات",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "",
"Delete automation?": "",
"Delete calendar": "",
"Delete Calendar": "",
"Delete Chat": "حذف المحادثه.",
"Delete chat?": "",
"Delete directory?": "",
"Delete Event": "",
"Delete File": "",
"Delete folder?": "",
@@ -583,6 +608,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "",
"Direct Message": "",
"Direct Tool Servers": "",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "",
"Disable All": "",
"Disable Code Interpreter": "",
@@ -691,6 +721,7 @@
"Embedding Concurrent Requests": "",
"Embedding Model": "نموذج التضمين",
"Embedding Model Engine": "تضمين محرك النموذج",
"Emoji": "",
"Emojis": "",
"Empty message": "",
"Enable All": "",
@@ -769,6 +800,7 @@
"Enter Kagi Search API Key": "",
"Enter Key Behavior": "",
"Enter language codes": "أدخل كود اللغة",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "",
"Enter Mistral API Base URL": "",
"Enter Mistral API Key": "",
@@ -905,6 +937,7 @@
"Failed to archive chat.": "",
"Failed to attach file": "",
"Failed to clear status": "",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to connect to {{URL}} terminal server": "",
"Failed to copy link": "",
@@ -958,14 +991,16 @@
"File content updated successfully.": "",
"File Context": "",
"File deleted successfully.": "",
"File Extensions": "",
"File Mode": "وضع الملف",
"File moved.": "",
"File name": "",
"File not found.": "لم يتم العثور على الملف.",
"File removed successfully.": "",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "",
"File Upload": "",
"File uploaded successfully": "",
"File uploaded!": "",
"Filename": "",
"Files": "",
"Filter": "",
@@ -1181,13 +1216,13 @@
"Knowledge": "",
"Knowledge Access": "",
"Knowledge Base": "",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "",
"Knowledge deleted successfully.": "",
"Knowledge Description": "",
"Knowledge exported successfully": "",
"Knowledge Name": "",
"Knowledge Public Sharing": "",
"Knowledge reset successfully.": "",
"Knowledge Sharing": "",
"Knowledge updated successfully": "",
"Kokoro.js (Browser)": "",
@@ -1231,6 +1266,7 @@
"Light": "فاتح",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "",
"Linkup API Key": "",
"List": "",
"List calendars, search, create, update, and delete calendar events": "",
"Listening...": "",
@@ -1381,6 +1417,8 @@
"New calendar": "",
"New Calendar": "",
"New Chat": "دردشة جديدة",
"New directory": "",
"New Directory": "",
"New Event": "",
"New File": "",
"New Folder": "",
@@ -1426,11 +1464,13 @@
"No HTML, CSS, or JavaScript content found.": "",
"No inference engine with management support found": "",
"No kernel": "",
"No knowledge bases accessible": "",
"No knowledge bases found.": "",
"No knowledge found": "",
"No limit": "",
"No memories to clear": "",
"No model IDs": "",
"No models accessible": "",
"No models available": "",
"No models found": "",
"No models selected": "",
@@ -1451,6 +1491,7 @@
"No Terminal connection configured.": "",
"No terminal connections configured.": "",
"No tool server connections configured.": "",
"No tools accessible": "",
"No tools found": "",
"No users were found.": "",
"No valves": "",
@@ -1490,6 +1531,7 @@
"On": "تشغيل",
"Once": "",
"OneDrive": "",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "",
"Only active when the chat input is in focus and an LLM is generating a response.": "",
"Only active when the chat input is in focus.": "",
@@ -1561,6 +1603,7 @@
"PDF document (.pdf)": "PDF ملف (.pdf)",
"PDF Extract Images (OCR)": "PDF أستخرج الصور (OCR)",
"PDF Loader Mode": "",
"pdf, docx, pptx, xlsx": "",
"pending": "قيد الانتظار",
"Pending": "",
"Pending User Overlay Content": "",
@@ -1622,6 +1665,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "",
"Prevent File Creation": "",
"Preview": "",
"Preview Access": "",
"Previous 30 days": "أخر 30 يوم",
"Previous 7 days": "أخر 7 أيام",
"Previous message": "",
@@ -1699,6 +1743,12 @@
"Remove from favorites": "",
"Remove image": "",
"Remove Model": "حذف الموديل",
"Removing {{count}} stale files..._zero": "",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._two": "",
"Removing {{count}} stale files..._few": "",
"Removing {{count}} stale files..._many": "",
"Removing {{count}} stale files..._other": "",
"Rename": "إعادة تسمية",
"Renamed to {{name}}": "",
"Render Markdown in Assistant Messages": "",
@@ -1717,6 +1767,7 @@
"Reset": "",
"Reset All Models": "",
"Reset Image": "إعادة تعيين الصورة",
"Reset knowledge base?": "",
"Reset Upload Directory": "",
"Reset Vector Storage/Knowledge": "",
"Reset view": "",
@@ -1788,6 +1839,7 @@
"Search Prompts": "أبحث حث",
"Search Result Count": "عدد نتائج البحث",
"Search Skills": "",
"Search skills...": "",
"Search the internet": "",
"Search the web and fetch URLs": "",
"Search Tools": "",
@@ -1989,6 +2041,8 @@
"Switch to JSON editor": "",
"Switch to visual editor": "",
"Sync": "",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "",
"Sync directory": "",
"Sync Failed": "",
@@ -2061,7 +2115,6 @@
"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.": "",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "",
"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.": "",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
"This response was generated by \"{{model}}\"": "",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "",
"This will delete": "",
@@ -2069,7 +2122,7 @@
"This will delete all models including custom models": "",
"This will delete all models including custom models and cannot be undone.": "",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "شرح شامل",
"Thought": "",
"Thought for {{DURATION}}": "",
@@ -2105,6 +2158,7 @@
"Toggle 1 source": "",
"Toggle details": "",
"Toggle Dictation": "",
"Toggle Mute": "",
"Toggle Sidebar": "",
"Toggle status history": "",
"Toggle whether current connection is active.": "",
@@ -2183,7 +2237,7 @@
"Upload Progress": "جاري التحميل",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "",
"Uploaded files or images": "",
"Uploading file...": "",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "",
"URL": "",
"URL is required": "",
@@ -2203,6 +2257,7 @@
"User Groups": "",
"User location successfully retrieved.": "",
"User menu": "",
"User Preview": "",
"User ratings (thumbs up/down)": "",
"User Status": "",
"User Webhooks": "",
+60 -5
View File
@@ -9,12 +9,25 @@
"[Today at] h:mm A": "",
"[Yesterday at] h:mm A": "",
"{{ models }}": "النماذج: {{ models }}",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "",
"{{COUNT}} characters": "",
"{{COUNT}} extracted lines": "",
"{{COUNT}} files": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_zero": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_two": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_few": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_many": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "{{COUNT}} سطر/أسطر مخفية",
"{{COUNT}} members": "",
"{{count}} of {{total}} accessible_zero": "",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_two": "",
"{{count}} of {{total}} accessible_few": "",
"{{count}} of {{total}} accessible_many": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "{{COUNT}} رد/ردود",
"{{COUNT}} Rows": "",
"{{count}} selected_zero": "",
@@ -197,6 +210,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "",
"Are you sure you want to delete this channel?": "هل أنت متأكد من رغبتك في حذف هذه القناة؟",
"Are you sure you want to delete this connection? This action cannot be undone.": "",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "",
"Are you sure you want to delete this message?": "هل أنت متأكد من رغبتك في حذف هذه الرسالة؟",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "",
@@ -243,6 +257,7 @@
"Automations": "",
"Available list": "القائمة المتاحة",
"Available models": "",
"Available Skills": "",
"Available Tools": "",
"available users": "المستخدمون المتاحون",
"available!": "متاح!",
@@ -402,13 +417,21 @@
"ComfyUI Workflow": "سير عمل ComfyUI",
"ComfyUI Workflow Nodes": "عقد سير عمل ComfyUI",
"Comma separated Node Ids (e.g. 1 or 1,2)": "",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "",
"Command": "الأمر",
"Comment": "",
"Commit Message": "",
"Community Reviews": "",
"Comparing with knowledge base...": "",
"Completions": "الإكمالات",
"Compress Images in Channels": "",
"Computing checksums ({{count}} files)_zero": "",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_two": "",
"Computing checksums ({{count}} files)_few": "",
"Computing checksums ({{count}} files)_many": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "الطلبات المتزامنة",
"Config": "",
"Config imported successfully": "",
@@ -541,12 +564,14 @@
"Delete a model": "حذف الموديل",
"Delete All": "",
"Delete All Chats": "حذف جميع الدردشات",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "",
"Delete automation?": "",
"Delete calendar": "",
"Delete Calendar": "",
"Delete Chat": "حذف المحادثه.",
"Delete chat?": "هل تريد حذف المحادثة؟",
"Delete directory?": "",
"Delete Event": "",
"Delete File": "",
"Delete folder?": "هل تريد حذف المجلد؟",
@@ -583,6 +608,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "تتيح الاتصالات المباشرة للمستخدمين الاتصال بنقاط نهاية API متوافقة مع OpenAI الخاصة بهم.",
"Direct Message": "",
"Direct Tool Servers": "",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "",
"Disable All": "",
"Disable Code Interpreter": "",
@@ -691,6 +721,7 @@
"Embedding Concurrent Requests": "",
"Embedding Model": "نموذج التضمين",
"Embedding Model Engine": "تضمين محرك النموذج",
"Emoji": "",
"Emojis": "",
"Empty message": "",
"Enable All": "",
@@ -769,6 +800,7 @@
"Enter Kagi Search API Key": "أدخل مفتاح API لـ Kagi Search",
"Enter Key Behavior": "أدخل سلوك المفتاح",
"Enter language codes": "أدخل كود اللغة",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "",
"Enter Mistral API Base URL": "",
"Enter Mistral API Key": "",
@@ -905,6 +937,7 @@
"Failed to archive chat.": "",
"Failed to attach file": "",
"Failed to clear status": "",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to connect to {{URL}} terminal server": "",
"Failed to copy link": "",
@@ -958,14 +991,16 @@
"File content updated successfully.": "تم تحديث محتوى الملف بنجاح.",
"File Context": "",
"File deleted successfully.": "",
"File Extensions": "",
"File Mode": "وضع الملف",
"File moved.": "",
"File name": "",
"File not found.": "لم يتم العثور على الملف.",
"File removed successfully.": "تم حذف الملف بنجاح.",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "يجب ألا يتجاوز حجم الملف {{maxSize}} ميغابايت.",
"File Upload": "",
"File uploaded successfully": "تم رفع الملف بنجاح",
"File uploaded!": "",
"Filename": "",
"Files": "الملفات",
"Filter": "",
@@ -1181,13 +1216,13 @@
"Knowledge": "المعرفة",
"Knowledge Access": "الوصول إلى المعرفة",
"Knowledge Base": "",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "تم إنشاء المعرفة بنجاح.",
"Knowledge deleted successfully.": "تم حذف المعرفة بنجاح.",
"Knowledge Description": "",
"Knowledge exported successfully": "",
"Knowledge Name": "",
"Knowledge Public Sharing": "",
"Knowledge reset successfully.": "تم إعادة تعيين المعرفة بنجاح.",
"Knowledge Sharing": "",
"Knowledge updated successfully": "تم تحديث المعرفة بنجاح",
"Kokoro.js (Browser)": "Kokoro.js (المتصفح)",
@@ -1231,6 +1266,7 @@
"Light": "فاتح",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "",
"Linkup API Key": "",
"List": "",
"List calendars, search, create, update, and delete calendar events": "",
"Listening...": "جارٍ الاستماع...",
@@ -1381,6 +1417,8 @@
"New calendar": "",
"New Calendar": "",
"New Chat": "دردشة جديدة",
"New directory": "",
"New Directory": "",
"New Event": "",
"New File": "",
"New Folder": "مجلد جديد",
@@ -1426,11 +1464,13 @@
"No HTML, CSS, or JavaScript content found.": "لم يتم العثور على محتوى HTML أو CSS أو JavaScript.",
"No inference engine with management support found": "لم يتم العثور على محرك استدلال يدعم الإدارة",
"No kernel": "",
"No knowledge bases accessible": "",
"No knowledge bases found.": "",
"No knowledge found": "لم يتم العثور على معرفة",
"No limit": "",
"No memories to clear": "لا توجد ذاكرة لمسحها",
"No model IDs": "لا توجد معرّفات نماذج",
"No models accessible": "",
"No models available": "",
"No models found": "لم يتم العثور على نماذج",
"No models selected": "لم يتم اختيار نماذج",
@@ -1451,6 +1491,7 @@
"No Terminal connection configured.": "",
"No terminal connections configured.": "",
"No tool server connections configured.": "",
"No tools accessible": "",
"No tools found": "",
"No users were found.": "لم يتم العثور على مستخدمين.",
"No valves": "",
@@ -1490,6 +1531,7 @@
"On": "تشغيل",
"Once": "",
"OneDrive": "OneDrive",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "",
"Only active when the chat input is in focus and an LLM is generating a response.": "",
"Only active when the chat input is in focus.": "",
@@ -1561,6 +1603,7 @@
"PDF document (.pdf)": "PDF ملف (.pdf)",
"PDF Extract Images (OCR)": "PDF أستخرج الصور (OCR)",
"PDF Loader Mode": "",
"pdf, docx, pptx, xlsx": "",
"pending": "قيد الانتظار",
"Pending": "",
"Pending User Overlay Content": "",
@@ -1622,6 +1665,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "يُستخدم معرف البادئة لتفادي التعارض مع الاتصالات الأخرى من خلال إضافة بادئة إلى معرفات النماذج – اتركه فارغًا لتعطيله",
"Prevent File Creation": "",
"Preview": "",
"Preview Access": "",
"Previous 30 days": "أخر 30 يوم",
"Previous 7 days": "أخر 7 أيام",
"Previous message": "",
@@ -1699,6 +1743,12 @@
"Remove from favorites": "",
"Remove image": "",
"Remove Model": "حذف الموديل",
"Removing {{count}} stale files..._zero": "",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._two": "",
"Removing {{count}} stale files..._few": "",
"Removing {{count}} stale files..._many": "",
"Removing {{count}} stale files..._other": "",
"Rename": "إعادة تسمية",
"Renamed to {{name}}": "",
"Render Markdown in Assistant Messages": "",
@@ -1717,6 +1767,7 @@
"Reset": "إعادة تعيين",
"Reset All Models": "إعادة تعيين جميع النماذج",
"Reset Image": "إعادة تعيين الصورة",
"Reset knowledge base?": "",
"Reset Upload Directory": "إعادة تعيين مجلد التحميل",
"Reset Vector Storage/Knowledge": "إعادة تعيين تخزين المتجهات/المعرفة",
"Reset view": "إعادة تعيين العرض",
@@ -1788,6 +1839,7 @@
"Search Prompts": "أبحث حث",
"Search Result Count": "عدد نتائج البحث",
"Search Skills": "",
"Search skills...": "",
"Search the internet": "البحث في الإنترنت",
"Search the web and fetch URLs": "",
"Search Tools": "أدوات البحث",
@@ -1989,6 +2041,8 @@
"Switch to JSON editor": "",
"Switch to visual editor": "",
"Sync": "",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "",
"Sync directory": "مزامنة المجلد",
"Sync Failed": "",
@@ -2061,7 +2115,6 @@
"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.": "هذا الخيار يحدد عدد الرموز التي يتم الاحتفاظ بها عند تحديث السياق. مثلاً، إذا تم ضبطه على 2، سيتم الاحتفاظ بآخر رمزين من السياق. الحفاظ على السياق يساعد في استمرارية المحادثة، لكنه قد يحد من التفاعل مع مواضيع جديدة.",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "",
"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.": "يحدد هذا الخيار الحد الأقصى لعدد الرموز التي يمكن للنموذج توليدها في الرد. زيادته تتيح للنموذج تقديم إجابات أطول، لكنها قد تزيد من احتمالية توليد محتوى غير مفيد أو غير ذي صلة.",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "سيؤدي هذا الخيار إلى حذف جميع الملفات الحالية في المجموعة واستبدالها بالملفات التي تم تحميلها حديثًا.",
"This response was generated by \"{{model}}\"": "تم توليد هذا الرد بواسطة \"{{model}}\"",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "",
"This will delete": "هذا سيقوم بالحذف",
@@ -2069,7 +2122,7 @@
"This will delete all models including custom models": "هذا سيحذف جميع النماذج بما في ذلك النماذج المخصصة",
"This will delete all models including custom models and cannot be undone.": "هذا سيحذف جميع النماذج بما في ذلك المخصصة ولا يمكن التراجع عن هذا الإجراء.",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "هذا سيؤدي إلى إعادة تعيين قاعدة المعرفة ومزامنة جميع الملفات. هل ترغب في المتابعة؟",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "شرح شامل",
"Thought": "",
"Thought for {{DURATION}}": "فكّر لمدة {{DURATION}}",
@@ -2105,6 +2158,7 @@
"Toggle 1 source": "",
"Toggle details": "",
"Toggle Dictation": "",
"Toggle Mute": "",
"Toggle Sidebar": "",
"Toggle status history": "",
"Toggle whether current connection is active.": "",
@@ -2183,7 +2237,7 @@
"Upload Progress": "جاري التحميل",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "",
"Uploaded files or images": "",
"Uploading file...": "",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "",
"URL": "الرابط",
"URL is required": "",
@@ -2203,6 +2257,7 @@
"User Groups": "",
"User location successfully retrieved.": "تم استرجاع موقع المستخدم بنجاح.",
"User menu": "",
"User Preview": "",
"User ratings (thumbs up/down)": "",
"User Status": "",
"User Webhooks": "",
+44 -5
View File
@@ -9,12 +9,17 @@
"[Today at] h:mm A": "[Bu gün saat] h:mm A",
"[Yesterday at] h:mm A": "[Dünən saat] h:mm A",
"{{ models }}": "{{ models }}",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "{{COUNT}} Mövcud Alət",
"{{COUNT}} characters": "{{COUNT}} simvol",
"{{COUNT}} extracted lines": "{{COUNT}} çıxarılmış sətir",
"{{COUNT}} files": "{{COUNT}} fayl",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "{{COUNT}} gizli sətir",
"{{COUNT}} members": "{{COUNT}} üzv",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "{{COUNT}} Cavab",
"{{COUNT}} Rows": "{{COUNT}} Sətir",
"{{count}} selected_one": "",
@@ -193,6 +198,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "Bütün çatları silmək istədiyinizə əminsiniz? Bu əməliyyat geri qaytarıla bilməz.",
"Are you sure you want to delete this channel?": "Bu kanalı silmək istədiyinizə əminsiniz?",
"Are you sure you want to delete this connection? This action cannot be undone.": "",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "",
"Are you sure you want to delete this message?": "Bu mesajı silmək istədiyinizə əminsiniz?",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "Bu versiyanı silmək istədiyinizə əminsiniz? Alt versiyalar bu versiyanın valideyninə yenidən bağlanacaq.",
@@ -239,6 +245,7 @@
"Automations": "",
"Available list": "Mövcud siyahı",
"Available models": "Mövcud modellər",
"Available Skills": "",
"Available Tools": "Mövcud alətlər",
"available users": "mövcud istifadəçilər",
"available!": "mövcuddur!",
@@ -398,13 +405,17 @@
"ComfyUI Workflow": "ComfyUI iş axını (Workflow)",
"ComfyUI Workflow Nodes": "ComfyUI iş axını düyünləri (Nodes)",
"Comma separated Node Ids (e.g. 1 or 1,2)": "Vergüllə ayrılmış düyün ID-ləri (məsələn: 1 və ya 1,2)",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "əmr",
"Command": "Əmr",
"Comment": "Şərh",
"Commit Message": "Təsdiqləmə mesajı (Commit Message)",
"Community Reviews": "İcma rəyləri",
"Comparing with knowledge base...": "",
"Completions": "Tamamlamalar",
"Compress Images in Channels": "Kanallarda şəkilləri sıx",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "Eyni vaxtda olan sorğular",
"Config": "Konfiqurasiya",
"Config imported successfully": "Konfiqurasiya uğurla idxal edildi",
@@ -537,12 +548,14 @@
"Delete a model": "Modeli sil",
"Delete All": "Hamısını sil",
"Delete All Chats": "Bütün çatları sil",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "Bu qovluğun daxilindəki bütün məzmunu sil",
"Delete automation?": "",
"Delete calendar": "",
"Delete Calendar": "",
"Delete Chat": "Çatı sil",
"Delete chat?": "Çat silinsin?",
"Delete directory?": "",
"Delete Event": "",
"Delete File": "Faylı sil",
"Delete folder?": "Qovluq silinsin?",
@@ -579,6 +592,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Birbaşa bağlantılar istifadəçilərə öz OpenAI uyğun API son nöqtələrinə qoşulmağa imkan verir.",
"Direct Message": "Birbaşa mesaj",
"Direct Tool Servers": "Birbaşa alət serverləri",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "Kataloq seçimi ləğv edildi",
"Disable All": "Hamısını söndür",
"Disable Code Interpreter": "Kod tərcüməçisini (Interpreter) söndür",
@@ -687,6 +705,7 @@
"Embedding Concurrent Requests": "Eyni vaxtda olan yerləşdirmə sorğuları",
"Embedding Model": "Yerləşdirmə modeli",
"Embedding Model Engine": "Yerləşdirmə modeli mühərriki",
"Emoji": "",
"Emojis": "",
"Empty message": "Boş mesaj",
"Enable All": "Hamısını aktiv et",
@@ -765,6 +784,7 @@
"Enter Kagi Search API Key": "Kagi Search API açarını daxil edin",
"Enter Key Behavior": "Açar davranışını (Key Behavior) daxil edin",
"Enter language codes": "Dil kodlarını daxil edin",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "MinerU API açarını daxil edin",
"Enter Mistral API Base URL": "Mistral API baza URL-ini daxil edin",
"Enter Mistral API Key": "Mistral API açarını daxil edin",
@@ -901,6 +921,7 @@
"Failed to archive chat.": "Çat arxivləşdirilmədi.",
"Failed to attach file": "Fayl əlavə edilmədi",
"Failed to clear status": "Status təmizlənmədi",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "{{URL}} OpenAPI alət serverinə qoşulmaq mümkün olmadı",
"Failed to connect to {{URL}} terminal server": "{{URL}} terminal serverinə qoşulmaq mümkün olmadı",
"Failed to copy link": "Link kopyalanmadı",
@@ -954,14 +975,16 @@
"File content updated successfully.": "Fayl məzmunu uğurla yeniləndi.",
"File Context": "Fayl konteksti",
"File deleted successfully.": "Fayl uğurla silindi.",
"File Extensions": "",
"File Mode": "Fayl rejimi",
"File moved.": "",
"File name": "Fayl adı",
"File not found.": "Fayl tapılmadı.",
"File removed successfully.": "Fayl uğurla çıxarıldı.",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "Fayl ölçüsü {{maxSize}} MB-ı keçməməlidir.",
"File Upload": "Fayl yükləmə",
"File uploaded successfully": "Fayl uğurla yükləndi",
"File uploaded!": "Fayl yükləndi!",
"Filename": "Fayl adı",
"Files": "Fayllar",
"Filter": "Süzgəc (Filter)",
@@ -1177,13 +1200,13 @@
"Knowledge": "Bilik",
"Knowledge Access": "Bilik bazasına giriş",
"Knowledge Base": "Bilik bazası",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "Bilik uğurla yaradıldı.",
"Knowledge deleted successfully.": "Bilik uğurla silindi.",
"Knowledge Description": "Bilik təsviri",
"Knowledge exported successfully": "Bilik uğurla ixrac edildi",
"Knowledge Name": "Bilik adı",
"Knowledge Public Sharing": "Biliyin ictimai paylaşımı",
"Knowledge reset successfully.": "Bilik uğurla sıfırlandı.",
"Knowledge Sharing": "Biliyin paylaşılması",
"Knowledge updated successfully": "Bilik uğurla yeniləndi",
"Kokoro.js (Browser)": "Kokoro.js (Brauzer)",
@@ -1227,6 +1250,7 @@
"Light": "Açıq (Light)",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "Eyni vaxtda aparılan axtarış sorğularını məhdudlaşdırın. 0 = limitsiz (standart). Ardıcıl icra üçün 1 təyin edin.",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "Eyni vaxtda olan yerləşdirmə (embedding) sorğularının sayını məhdudlaşdırır. Limitsiz üçün 0 təyin edin.",
"Linkup API Key": "",
"List": "Siyahı",
"List calendars, search, create, update, and delete calendar events": "",
"Listening...": "Dinlənilir...",
@@ -1377,6 +1401,8 @@
"New calendar": "",
"New Calendar": "",
"New Chat": "Yeni Çat",
"New directory": "",
"New Directory": "",
"New Event": "",
"New File": "Yeni Fayl",
"New Folder": "Yeni Qovluq",
@@ -1422,11 +1448,13 @@
"No HTML, CSS, or JavaScript content found.": "HTML, CSS və ya JavaScript məzmunu tapılmadı.",
"No inference engine with management support found": "İdarəetmə dəstəyi olan çıxarış mühərriki (inference engine) tapılmadı",
"No kernel": "Nüvə (kernel) yoxdur",
"No knowledge bases accessible": "",
"No knowledge bases found.": "Bilik bazası tapılmadı.",
"No knowledge found": "Bilik tapılmadı",
"No limit": "",
"No memories to clear": "Təmizlənməli yaddaş yoxdur",
"No model IDs": "Model ID-si yoxdur",
"No models accessible": "",
"No models available": "Mövcud model yoxdur",
"No models found": "Model tapılmadı",
"No models selected": "Model seçilməyib",
@@ -1447,6 +1475,7 @@
"No Terminal connection configured.": "Konfiqurasiya edilmiş Terminal bağlantısı yoxdur.",
"No terminal connections configured.": "Konfiqurasiya edilmiş terminal bağlantıları yoxdur.",
"No tool server connections configured.": "Konfiqurasiya edilmiş alət serveri bağlantıları yoxdur.",
"No tools accessible": "",
"No tools found": "Alət tapılmadı",
"No users were found.": "İstifadəçi tapılmadı.",
"No valves": "Klapan (valve) yoxdur",
@@ -1486,6 +1515,7 @@
"On": "Açıq",
"Once": "",
"OneDrive": "OneDrive",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "Yalnız \"Böyük mətni fayl kimi yapışdır\" ayarı aktiv olduqda işləyir.",
"Only active when the chat input is in focus and an LLM is generating a response.": "Yalnız çat girişi fokusda olduqda və LLM cavab yaratdıqda aktiv olur.",
"Only active when the chat input is in focus.": "Yalnız çat girişi fokusda olduqda aktiv olur.",
@@ -1557,6 +1587,7 @@
"PDF document (.pdf)": "PDF sənədi (.pdf)",
"PDF Extract Images (OCR)": "PDF-dən şəkillərin çıxarılması (OCR)",
"PDF Loader Mode": "PDF yükləyici rejimi",
"pdf, docx, pptx, xlsx": "",
"pending": "gözləmədə",
"Pending": "Gözləmədə",
"Pending User Overlay Content": "Gözləyən istifadəçi örtük məzmunu",
@@ -1618,6 +1649,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "Prefiks ID model ID-lərinə prefiks əlavə edərək digər bağlantılarla ziddiyyətlərin qarşısını almaq üçün istifadə olunur - söndürmək üçün boş saxlayın",
"Prevent File Creation": "Fayl yaradılmasının qarşısını al",
"Preview": "Önizləmə",
"Preview Access": "",
"Previous 30 days": "Son 30 gün",
"Previous 7 days": "Son 7 gün",
"Previous message": "Əvvəlki mesaj",
@@ -1695,6 +1727,8 @@
"Remove from favorites": "Sevimlilərdən çıxar",
"Remove image": "Şəkli sil",
"Remove Model": "Modeli Sil",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._other": "",
"Rename": "Adını dəyiş",
"Renamed to {{name}}": "",
"Render Markdown in Assistant Messages": "",
@@ -1713,6 +1747,7 @@
"Reset": "Sıfırla",
"Reset All Models": "Bütün modelləri sıfırla",
"Reset Image": "Şəkli sıfırla",
"Reset knowledge base?": "",
"Reset Upload Directory": "Yükləmə kataloqunu sıfırla",
"Reset Vector Storage/Knowledge": "Vektor yaddaşını/Biliyi sıfırla",
"Reset view": "Görünüşü sıfırla",
@@ -1780,6 +1815,7 @@
"Search Prompts": "Axtarış göstərişləri",
"Search Result Count": "Axtarış nəticələrinin sayı",
"Search Skills": "Axtarış bacarıqları",
"Search skills...": "",
"Search the internet": "İnternetdə axtar",
"Search the web and fetch URLs": "Vebdə axtar və URL-ləri gətir",
"Search Tools": "Axtarış alətləri",
@@ -1977,6 +2013,8 @@
"Switch to JSON editor": "",
"Switch to visual editor": "",
"Sync": "Sinxronizasiya",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "Sinxronizasiya tamamlandı!",
"Sync directory": "Sinxronizasiya kataloqu",
"Sync Failed": "Sinxronizasiya alınmadı",
@@ -2049,7 +2087,6 @@
"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.": "Bu seçim kontekst yenilənərkən neçə tokenin qorunacağına nəzarət edir. Məsələn, 2 təyin edilərsə, söhbət kontekstinin son 2 tokeni saxlanılacaq. Konteksti qorumaq söhbətin davamlılığını saxlamağa kömək edir, lakin yeni mövzulara cavab vermə qabiliyyətini azalda bilər.",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "Bu seçim Ollama-da mühakimə (reasoning) funksiyasının istifadəsini aktivləşdirir və ya söndürür; bu, modelin cavab yaratmazdan əvvəl 'düşünməsinə' imkan verir. Aktiv edildikdə, model söhbət kontekstini emal etmək və daha dolğun cavab vermək üçün bir anlıq fasilə verə bilər.",
"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.": "Bu seçim modelin cavabında yarada biləcəyi maksimum token sayını təyin edir. Bu limiti artırmaq modelə daha uzun cavablar verməyə imkan verir, lakin faydasız və ya mövzuya aid olmayan məzmunun yaranma ehtimalını da artıra bilər.",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Bu seçim kolleksiyadakı bütün mövcud faylları siləcək və onları yeni yüklənmiş fayllarla əvəz edəcək.",
"This response was generated by \"{{model}}\"": "Bu cavab \"{{model}}\" tərəfindən yaradılmışdır",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "",
"This will delete": "Bu, siləcək:",
@@ -2057,7 +2094,7 @@
"This will delete all models including custom models": "Bu, fərdi modellər də daxil olmaqla bütün modelləri siləcək",
"This will delete all models including custom models and cannot be undone.": "Bu, fərdi modellər də daxil olmaqla bütün modelləri siləcək və geri qaytarıla bilməz.",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "Bu, bilik bazasını sıfırlayacaq və bütün faylları sinxronizasiya edəcək. Davam etmək istəyirsiniz?",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "Ətraflı izahat",
"Thought": "",
"Thought for {{DURATION}}": "{{DURATION}} müddətində düşündü",
@@ -2093,6 +2130,7 @@
"Toggle 1 source": "1 mənbəni göstər/gizlə",
"Toggle details": "",
"Toggle Dictation": "Diktəni aç/bağla",
"Toggle Mute": "",
"Toggle Sidebar": "Yan paneli aç/bağla",
"Toggle status history": "Status tarixçəsini aç/bağla",
"Toggle whether current connection is active.": "Hazırkı bağlantının aktiv olub-olmadığını dəyişdirin.",
@@ -2171,7 +2209,7 @@
"Upload Progress": "Yükləmə vəziyyəti",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "Yükləmə vəziyyəti: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)",
"Uploaded files or images": "Yüklənmiş fayllar və ya şəkillər",
"Uploading file...": "Fayl yüklənir...",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "Yüklənir...",
"URL": "URL",
"URL is required": "URL tələb olunur",
@@ -2191,6 +2229,7 @@
"User Groups": "İstifadəçi qrupları",
"User location successfully retrieved.": "İstifadəçi yeri uğurla müəyyən edildi.",
"User menu": "İstifadəçi menyusu",
"User Preview": "",
"User ratings (thumbs up/down)": "İstifadəçi reytinqləri (bəyənmə/bəyənməmə)",
"User Status": "İstifadəçi statusu",
"User Webhooks": "İstifadəçi Webhook-ları",
+44 -5
View File
@@ -9,12 +9,17 @@
"[Today at] h:mm A": "",
"[Yesterday at] h:mm A": "",
"{{ models }}": "{{ models }}",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "",
"{{COUNT}} characters": "",
"{{COUNT}} extracted lines": "",
"{{COUNT}} files": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "",
"{{COUNT}} members": "",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "{{COUNT}} Отговори",
"{{COUNT}} Rows": "",
"{{count}} selected_one": "",
@@ -193,6 +198,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "",
"Are you sure you want to delete this channel?": "Сигурни ли сте, че искате да изтриете този канал?",
"Are you sure you want to delete this connection? This action cannot be undone.": "",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "",
"Are you sure you want to delete this message?": "Сигурни ли сте, че искате да изтриете това съобщение?",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "",
@@ -239,6 +245,7 @@
"Automations": "",
"Available list": "Наличен списък",
"Available models": "",
"Available Skills": "",
"Available Tools": "Налични инструменти",
"available users": "Налични потребители",
"available!": "наличен!",
@@ -398,13 +405,17 @@
"ComfyUI Workflow": "ComfyUI Работен поток",
"ComfyUI Workflow Nodes": "Възли на ComfyUI работен поток",
"Comma separated Node Ids (e.g. 1 or 1,2)": "",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "",
"Command": "Команда",
"Comment": "",
"Commit Message": "",
"Community Reviews": "",
"Comparing with knowledge base...": "",
"Completions": "Довършвания",
"Compress Images in Channels": "",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "Едновременни заявки",
"Config": "",
"Config imported successfully": "",
@@ -537,12 +548,14 @@
"Delete a model": "Изтриване на модела",
"Delete All": "",
"Delete All Chats": "Изтриване на всички чатове",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "",
"Delete automation?": "",
"Delete calendar": "",
"Delete Calendar": "",
"Delete Chat": "Изтриване на Чат",
"Delete chat?": "Изтриване на чата?",
"Delete directory?": "",
"Delete Event": "",
"Delete File": "",
"Delete folder?": "Изтриване на папката?",
@@ -579,6 +592,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Директните връзки позволяват на потребителите да се свързват със собствени OpenAI съвместими API крайни точки.",
"Direct Message": "",
"Direct Tool Servers": "",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "",
"Disable All": "",
"Disable Code Interpreter": "",
@@ -687,6 +705,7 @@
"Embedding Concurrent Requests": "",
"Embedding Model": "Модел за вграждане",
"Embedding Model Engine": "Двигател на модела за вграждане",
"Emoji": "",
"Emojis": "",
"Empty message": "",
"Enable All": "",
@@ -765,6 +784,7 @@
"Enter Kagi Search API Key": "Въведете API ключ за Kagi Search",
"Enter Key Behavior": "",
"Enter language codes": "Въведете кодове на езика",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "",
"Enter Mistral API Base URL": "",
"Enter Mistral API Key": "",
@@ -901,6 +921,7 @@
"Failed to archive chat.": "",
"Failed to attach file": "",
"Failed to clear status": "",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to connect to {{URL}} terminal server": "",
"Failed to copy link": "",
@@ -954,14 +975,16 @@
"File content updated successfully.": "Съдържанието на файла е актуализирано успешно.",
"File Context": "",
"File deleted successfully.": "",
"File Extensions": "",
"File Mode": "Файлов режим",
"File moved.": "",
"File name": "",
"File not found.": "Файл не е намерен.",
"File removed successfully.": "Файлът е премахнат успешно.",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "Размерът на файла не трябва да надвишава {{maxSize}} MB.",
"File Upload": "",
"File uploaded successfully": "Файлът е качен успешно",
"File uploaded!": "",
"Filename": "",
"Files": "Файлове",
"Filter": "",
@@ -1177,13 +1200,13 @@
"Knowledge": "Знания",
"Knowledge Access": "Достъп до знания",
"Knowledge Base": "",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "Знанието е създадено успешно.",
"Knowledge deleted successfully.": "Знанието е изтрито успешно.",
"Knowledge Description": "",
"Knowledge exported successfully": "",
"Knowledge Name": "",
"Knowledge Public Sharing": "",
"Knowledge reset successfully.": "Знанието е нулирано успешно.",
"Knowledge Sharing": "",
"Knowledge updated successfully": "Знанието е актуализирано успешно",
"Kokoro.js (Browser)": "Kokoro.js (Браузър)",
@@ -1227,6 +1250,7 @@
"Light": "Светъл",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "",
"Linkup API Key": "",
"List": "",
"List calendars, search, create, update, and delete calendar events": "",
"Listening...": "Слушане...",
@@ -1377,6 +1401,8 @@
"New calendar": "",
"New Calendar": "",
"New Chat": "Нов чат",
"New directory": "",
"New Directory": "",
"New Event": "",
"New File": "",
"New Folder": "Нова папка",
@@ -1422,11 +1448,13 @@
"No HTML, CSS, or JavaScript content found.": "Не е намерено HTML, CSS или JavaScript съдържание.",
"No inference engine with management support found": "Не е намерен механизъм за извод с поддръжка на управлението",
"No kernel": "",
"No knowledge bases accessible": "",
"No knowledge bases found.": "",
"No knowledge found": "Не са намерени знания",
"No limit": "",
"No memories to clear": "",
"No model IDs": "Няма ИД-та на моделите",
"No models accessible": "",
"No models available": "",
"No models found": "Не са намерени модели",
"No models selected": "Няма избрани модели",
@@ -1447,6 +1475,7 @@
"No Terminal connection configured.": "",
"No terminal connections configured.": "",
"No tool server connections configured.": "",
"No tools accessible": "",
"No tools found": "",
"No users were found.": "Не са намерени потребители.",
"No valves": "",
@@ -1486,6 +1515,7 @@
"On": "Вкл.",
"Once": "",
"OneDrive": "OneDrive",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "",
"Only active when the chat input is in focus and an LLM is generating a response.": "",
"Only active when the chat input is in focus.": "",
@@ -1557,6 +1587,7 @@
"PDF document (.pdf)": "PDF документ (.pdf)",
"PDF Extract Images (OCR)": "Извличане на изображения от PDF (OCR)",
"PDF Loader Mode": "",
"pdf, docx, pptx, xlsx": "",
"pending": "в очакване",
"Pending": "",
"Pending User Overlay Content": "",
@@ -1618,6 +1649,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "Префикс ID се използва за избягване на конфликти с други връзки чрез добавяне на префикс към ID-тата на моделите - оставете празно, за да деактивирате",
"Prevent File Creation": "",
"Preview": "",
"Preview Access": "",
"Previous 30 days": "Предишните 30 дни",
"Previous 7 days": "Предишните 7 дни",
"Previous message": "",
@@ -1695,6 +1727,8 @@
"Remove from favorites": "",
"Remove image": "",
"Remove Model": "Изтриване на модела",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._other": "",
"Rename": "Преименуване",
"Renamed to {{name}}": "",
"Render Markdown in Assistant Messages": "",
@@ -1713,6 +1747,7 @@
"Reset": "Нулиране",
"Reset All Models": "Нулиране на всички модели",
"Reset Image": "Нулиране на изображението",
"Reset knowledge base?": "",
"Reset Upload Directory": "Нулиране на директорията за качване",
"Reset Vector Storage/Knowledge": "Нулиране на векторното хранилище/знания",
"Reset view": "Нулиране на изгледа",
@@ -1780,6 +1815,7 @@
"Search Prompts": "Търси Промптове",
"Search Result Count": "Брой резултати от търсенето",
"Search Skills": "",
"Search skills...": "",
"Search the internet": "Търсене в интернет",
"Search the web and fetch URLs": "",
"Search Tools": "Инструменти за търсене",
@@ -1977,6 +2013,8 @@
"Switch to JSON editor": "",
"Switch to visual editor": "",
"Sync": "",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "",
"Sync directory": "Синхронизирай директория",
"Sync Failed": "",
@@ -2049,7 +2087,6 @@
"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.": "",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "",
"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.": "",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Тази опция ще изтрие всички съществуващи файлове в колекцията и ще ги замени с новокачени файлове.",
"This response was generated by \"{{model}}\"": "Този отговор беше генериран от \"{{model}}\"",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "",
"This will delete": "Това ще изтрие",
@@ -2057,7 +2094,7 @@
"This will delete all models including custom models": "Това ще изтрие всички модели, включително персонализираните модели",
"This will delete all models including custom models and cannot be undone.": "Това ще изтрие всички модели, включително персонализираните модели, и не може да бъде отменено.",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "Това ще нулира базата знания и ще синхронизира всички файлове. Желаете ли да продължите?",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "Подробно обяснение",
"Thought": "",
"Thought for {{DURATION}}": "Мислил за {{DURATION}}",
@@ -2093,6 +2130,7 @@
"Toggle 1 source": "",
"Toggle details": "",
"Toggle Dictation": "",
"Toggle Mute": "",
"Toggle Sidebar": "",
"Toggle status history": "",
"Toggle whether current connection is active.": "",
@@ -2171,7 +2209,7 @@
"Upload Progress": "Прогрес на качването",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "",
"Uploaded files or images": "",
"Uploading file...": "",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "",
"URL": "URL",
"URL is required": "",
@@ -2191,6 +2229,7 @@
"User Groups": "",
"User location successfully retrieved.": "Местоположението на потребителя е успешно извлечено.",
"User menu": "",
"User Preview": "",
"User ratings (thumbs up/down)": "",
"User Status": "",
"User Webhooks": "",
+44 -5
View File
@@ -9,12 +9,17 @@
"[Today at] h:mm A": "",
"[Yesterday at] h:mm A": "",
"{{ models }}": "{{ মডেল}}",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "",
"{{COUNT}} characters": "",
"{{COUNT}} extracted lines": "",
"{{COUNT}} files": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "",
"{{COUNT}} members": "",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "",
"{{COUNT}} Rows": "",
"{{count}} selected_one": "",
@@ -193,6 +198,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "",
"Are you sure you want to delete this channel?": "",
"Are you sure you want to delete this connection? This action cannot be undone.": "",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "",
"Are you sure you want to delete this message?": "",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "",
@@ -239,6 +245,7 @@
"Automations": "",
"Available list": "",
"Available models": "",
"Available Skills": "",
"Available Tools": "",
"available users": "উপলব্ধ ব্যবহারকারী",
"available!": "উপলব্ধ!",
@@ -398,13 +405,17 @@
"ComfyUI Workflow": "",
"ComfyUI Workflow Nodes": "",
"Comma separated Node Ids (e.g. 1 or 1,2)": "",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "",
"Command": "কমান্ড",
"Comment": "",
"Commit Message": "",
"Community Reviews": "",
"Comparing with knowledge base...": "",
"Completions": "",
"Compress Images in Channels": "",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "সমকালীন অনুরোধ",
"Config": "",
"Config imported successfully": "",
@@ -537,12 +548,14 @@
"Delete a model": "একটি মডেল মুছে ফেলুন",
"Delete All": "",
"Delete All Chats": "সব চ্যাট মুছে ফেলুন",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "",
"Delete automation?": "",
"Delete calendar": "",
"Delete Calendar": "",
"Delete Chat": "চ্যাট মুছে ফেলুন",
"Delete chat?": "",
"Delete directory?": "",
"Delete Event": "",
"Delete File": "",
"Delete folder?": "",
@@ -579,6 +592,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "",
"Direct Message": "",
"Direct Tool Servers": "",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "",
"Disable All": "",
"Disable Code Interpreter": "",
@@ -687,6 +705,7 @@
"Embedding Concurrent Requests": "",
"Embedding Model": "ইমেজ ইমেবডিং মডেল",
"Embedding Model Engine": "ইমেজ ইমেবডিং মডেল ইঞ্জিন",
"Emoji": "",
"Emojis": "",
"Empty message": "",
"Enable All": "",
@@ -765,6 +784,7 @@
"Enter Kagi Search API Key": "",
"Enter Key Behavior": "",
"Enter language codes": "ল্যাঙ্গুয়েজ কোড লিখুন",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "",
"Enter Mistral API Base URL": "",
"Enter Mistral API Key": "",
@@ -901,6 +921,7 @@
"Failed to archive chat.": "",
"Failed to attach file": "",
"Failed to clear status": "",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to connect to {{URL}} terminal server": "",
"Failed to copy link": "",
@@ -954,14 +975,16 @@
"File content updated successfully.": "",
"File Context": "",
"File deleted successfully.": "",
"File Extensions": "",
"File Mode": "ফাইল মোড",
"File moved.": "",
"File name": "",
"File not found.": "ফাইল পাওয়া যায়নি",
"File removed successfully.": "",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "",
"File Upload": "",
"File uploaded successfully": "",
"File uploaded!": "",
"Filename": "",
"Files": "",
"Filter": "",
@@ -1177,13 +1200,13 @@
"Knowledge": "",
"Knowledge Access": "",
"Knowledge Base": "",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "",
"Knowledge deleted successfully.": "",
"Knowledge Description": "",
"Knowledge exported successfully": "",
"Knowledge Name": "",
"Knowledge Public Sharing": "",
"Knowledge reset successfully.": "",
"Knowledge Sharing": "",
"Knowledge updated successfully": "",
"Kokoro.js (Browser)": "",
@@ -1227,6 +1250,7 @@
"Light": "লাইট",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "",
"Linkup API Key": "",
"List": "",
"List calendars, search, create, update, and delete calendar events": "",
"Listening...": "",
@@ -1377,6 +1401,8 @@
"New calendar": "",
"New Calendar": "",
"New Chat": "নতুন চ্যাট",
"New directory": "",
"New Directory": "",
"New Event": "",
"New File": "",
"New Folder": "",
@@ -1422,11 +1448,13 @@
"No HTML, CSS, or JavaScript content found.": "",
"No inference engine with management support found": "",
"No kernel": "",
"No knowledge bases accessible": "",
"No knowledge bases found.": "",
"No knowledge found": "",
"No limit": "",
"No memories to clear": "",
"No model IDs": "",
"No models accessible": "",
"No models available": "",
"No models found": "",
"No models selected": "",
@@ -1447,6 +1475,7 @@
"No Terminal connection configured.": "",
"No terminal connections configured.": "",
"No tool server connections configured.": "",
"No tools accessible": "",
"No tools found": "",
"No users were found.": "",
"No valves": "",
@@ -1486,6 +1515,7 @@
"On": "চালু",
"Once": "",
"OneDrive": "",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "",
"Only active when the chat input is in focus and an LLM is generating a response.": "",
"Only active when the chat input is in focus.": "",
@@ -1557,6 +1587,7 @@
"PDF document (.pdf)": "PDF ডকুমেন্ট (.pdf)",
"PDF Extract Images (OCR)": "পিডিএফ এর ছবি থেকে লেখা বের করুন (OCR)",
"PDF Loader Mode": "",
"pdf, docx, pptx, xlsx": "",
"pending": "অপেক্ষমান",
"Pending": "",
"Pending User Overlay Content": "",
@@ -1618,6 +1649,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "",
"Prevent File Creation": "",
"Preview": "",
"Preview Access": "",
"Previous 30 days": "পূর্ব ৩০ দিন",
"Previous 7 days": "পূর্ব দিন",
"Previous message": "",
@@ -1695,6 +1727,8 @@
"Remove from favorites": "",
"Remove image": "",
"Remove Model": "মডেল রিমুভ করুন",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._other": "",
"Rename": "রেনেম",
"Renamed to {{name}}": "",
"Render Markdown in Assistant Messages": "",
@@ -1713,6 +1747,7 @@
"Reset": "",
"Reset All Models": "",
"Reset Image": "ছবি রিসেট করুন",
"Reset knowledge base?": "",
"Reset Upload Directory": "",
"Reset Vector Storage/Knowledge": "",
"Reset view": "",
@@ -1780,6 +1815,7 @@
"Search Prompts": "প্রম্পটসমূহ অনুসন্ধান করুন",
"Search Result Count": "অনুসন্ধানের ফলাফল গণনা",
"Search Skills": "",
"Search skills...": "",
"Search the internet": "",
"Search the web and fetch URLs": "",
"Search Tools": "",
@@ -1977,6 +2013,8 @@
"Switch to JSON editor": "",
"Switch to visual editor": "",
"Sync": "",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "",
"Sync directory": "",
"Sync Failed": "",
@@ -2049,7 +2087,6 @@
"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.": "",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "",
"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.": "",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
"This response was generated by \"{{model}}\"": "",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "",
"This will delete": "",
@@ -2057,7 +2094,7 @@
"This will delete all models including custom models": "",
"This will delete all models including custom models and cannot be undone.": "",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "পুঙ্খানুপুঙ্খ ব্যাখ্যা",
"Thought": "",
"Thought for {{DURATION}}": "",
@@ -2093,6 +2130,7 @@
"Toggle 1 source": "",
"Toggle details": "",
"Toggle Dictation": "",
"Toggle Mute": "",
"Toggle Sidebar": "",
"Toggle status history": "",
"Toggle whether current connection is active.": "",
@@ -2171,7 +2209,7 @@
"Upload Progress": "আপলোড হচ্ছে",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "",
"Uploaded files or images": "",
"Uploading file...": "",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "",
"URL": "",
"URL is required": "",
@@ -2191,6 +2229,7 @@
"User Groups": "",
"User location successfully retrieved.": "",
"User menu": "",
"User Preview": "",
"User ratings (thumbs up/down)": "",
"User Status": "",
"User Webhooks": "",
+40 -5
View File
@@ -9,12 +9,15 @@
"[Today at] h:mm A": "",
"[Yesterday at] h:mm A": "",
"{{ models }}": "{{ models }}",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "",
"{{COUNT}} characters": "",
"{{COUNT}} extracted lines": "",
"{{COUNT}} files": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "ཡིག་ཕྲེང་ {{COUNT}} སྦས་ཡོད།",
"{{COUNT}} members": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "ལན་ {{COUNT}}",
"{{COUNT}} Rows": "",
"{{count}} selected_other": "",
@@ -192,6 +195,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "",
"Are you sure you want to delete this channel?": "ཁྱེད་ཀྱིས་བགྲོ་གླེང་འདི་བསུབ་འདོད་ངེས་ཡིན་ནམ།",
"Are you sure you want to delete this connection? This action cannot be undone.": "",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "",
"Are you sure you want to delete this message?": "འཕྲིན་འདི་བསུབ་འདོད་ངེས་ཡིན་ནམ།",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "",
@@ -238,6 +242,7 @@
"Automations": "",
"Available list": "ཡོད་པའི་ཐོ་གཞུང་།",
"Available models": "",
"Available Skills": "",
"Available Tools": "",
"available users": "ཡོད་པའི་སྤྱོད་མཁན",
"available!": "ཡོད།",
@@ -397,13 +402,16 @@
"ComfyUI Workflow": "ComfyUI ལས་ཀའི་རྒྱུན་རིམ།",
"ComfyUI Workflow Nodes": "ComfyUI ལས་ཀའི་རྒྱུན་རིམ་མདུད་ཚེག",
"Comma separated Node Ids (e.g. 1 or 1,2)": "",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "",
"Command": "བཀའ་བརྡ།",
"Comment": "",
"Commit Message": "",
"Community Reviews": "",
"Comparing with knowledge base...": "",
"Completions": "འགྲུབ་པ།",
"Compress Images in Channels": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "མཉམ་ལས་རེ་ཞུ།",
"Config": "",
"Config imported successfully": "",
@@ -536,12 +544,14 @@
"Delete a model": "དཔེ་དབྱིབས་ཤིག་བསུབ་པ།",
"Delete All": "",
"Delete All Chats": "ཁ་བརྡ་ཡོངས་རྫོགས་བསུབ་པ།",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "",
"Delete automation?": "",
"Delete calendar": "",
"Delete Calendar": "",
"Delete Chat": "ཁ་བརྡ་བསུབ་པ།",
"Delete chat?": "ཁ་བརྡ་བསུབ་པ།?",
"Delete directory?": "",
"Delete Event": "",
"Delete File": "",
"Delete folder?": "ཡིག་སྣོད་བསུབ་པ།?",
@@ -578,6 +588,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "ཐད་ཀར་སྦྲེལ་མཐུད་ཀྱིས་བེད་སྤྱོད་མཁན་ཚོར་ཁོ་ཚོའི་རང་གི་ OpenAI དང་མཐུན་པའི་ API མཇུག་མཐུད་ལ་སྦྲེལ་བར་གནང་བ་སྤྲོད།",
"Direct Message": "",
"Direct Tool Servers": "",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "",
"Disable All": "",
"Disable Code Interpreter": "",
@@ -686,6 +701,7 @@
"Embedding Concurrent Requests": "",
"Embedding Model": "ཚུད་འཇུག་དཔེ་དབྱིབས།",
"Embedding Model Engine": "ཚུད་འཇུག་དཔེ་དབྱིབས་འཕྲུལ་འཁོར།",
"Emoji": "",
"Emojis": "",
"Empty message": "",
"Enable All": "",
@@ -764,6 +780,7 @@
"Enter Kagi Search API Key": "Kagi Search API ལྡེ་མིག་འཇུག་པ།",
"Enter Key Behavior": "ལྡེ་མིག་གི་བྱེད་སྟངས་འཇུག་པ།",
"Enter language codes": "སྐད་ཡིག་གི་ཨང་རྟགས་འཇུག་པ།",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "",
"Enter Mistral API Base URL": "",
"Enter Mistral API Key": "",
@@ -900,6 +917,7 @@
"Failed to archive chat.": "",
"Failed to attach file": "",
"Failed to clear status": "",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "{{URL}} OpenAPI ལག་ཆའི་སར་བར་ལ་སྦྲེལ་མཐུད་བྱེད་མ་ཐུབ།",
"Failed to connect to {{URL}} terminal server": "",
"Failed to copy link": "",
@@ -953,14 +971,16 @@
"File content updated successfully.": "ཡིག་ཆའི་ནང་དོན་ལེགས་པར་གསར་སྒྱུར་བྱས་ཟིན།",
"File Context": "",
"File deleted successfully.": "",
"File Extensions": "",
"File Mode": "ཡིག་ཆའི་མ་དཔེ།",
"File moved.": "",
"File name": "",
"File not found.": "ཡིག་ཆ་མ་རྙེད།",
"File removed successfully.": "ཡིག་ཆ་ལེགས་པར་བསུབས་ཟིན།",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "ཡིག་ཆའི་ཆེ་ཆུང་ {{maxSize}} MB ལས་མི་བརྒལ་དགོས།",
"File Upload": "",
"File uploaded successfully": "ཡིག་ཆ་ལེགས་པར་སྤར་ཟིན།",
"File uploaded!": "",
"Filename": "",
"Files": "ཡིག་ཆ།",
"Filter": "",
@@ -1176,13 +1196,13 @@
"Knowledge": "ཤེས་བྱ།",
"Knowledge Access": "ཤེས་བྱར་འཛུལ་སྤྱོད།",
"Knowledge Base": "",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "ཤེས་བྱ་ལེགས་པར་བཟོས་ཟིན།",
"Knowledge deleted successfully.": "ཤེས་བྱ་ལེགས་པར་བསུབས་ཟིན།",
"Knowledge Description": "",
"Knowledge exported successfully": "",
"Knowledge Name": "",
"Knowledge Public Sharing": "ཤེས་བྱ་སྤྱི་སྤྱོད་མཉམ་སྤྱོད།",
"Knowledge reset successfully.": "ཤེས་བྱ་ལེགས་པར་སླར་སྒྲིག་བྱས་ཟིན།",
"Knowledge Sharing": "",
"Knowledge updated successfully": "ཤེས་བྱ་ལེགས་པར་གསར་སྒྱུར་བྱས་ཟིན།",
"Kokoro.js (Browser)": "Kokoro.js (བརྡ་འཚོལ་ཆས།)",
@@ -1226,6 +1246,7 @@
"Light": "དཀར་པོ།",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "",
"Linkup API Key": "",
"List": "",
"List calendars, search, create, update, and delete calendar events": "",
"Listening...": "ཉན་བཞིན་པ།...",
@@ -1376,6 +1397,8 @@
"New calendar": "",
"New Calendar": "",
"New Chat": "ཁ་བརྡ་གསར་པ།",
"New directory": "",
"New Directory": "",
"New Event": "",
"New File": "",
"New Folder": "ཡིག་སྣོད་གསར་པ།",
@@ -1421,11 +1444,13 @@
"No HTML, CSS, or JavaScript content found.": "HTML, CSS, ཡང་ན་ JavaScript གི་ནང་དོན་མ་རྙེད།",
"No inference engine with management support found": "དོ་དམ་རྒྱབ་སྐྱོར་ཡོད་པའི་དཔོག་རྩིས་འཕྲུལ་འཁོར་མ་རྙེད།",
"No kernel": "",
"No knowledge bases accessible": "",
"No knowledge bases found.": "",
"No knowledge found": "ཤེས་བྱ་མ་རྙེད།",
"No limit": "",
"No memories to clear": "གཙང་སེལ་བྱེད་རྒྱུའི་དྲན་ཤེས་མེད།",
"No model IDs": "དཔེ་དབྱིབས་ཀྱི་ ID མེད།",
"No models accessible": "",
"No models available": "",
"No models found": "དཔེ་དབྱིབས་མ་རྙེད།",
"No models selected": "དཔེ་དབྱིབས་གདམ་ག་མ་བྱས།",
@@ -1446,6 +1471,7 @@
"No Terminal connection configured.": "",
"No terminal connections configured.": "",
"No tool server connections configured.": "",
"No tools accessible": "",
"No tools found": "",
"No users were found.": "བེད་སྤྱོད་མཁན་མ་རྙེད།",
"No valves": "",
@@ -1485,6 +1511,7 @@
"On": "ཁ་ཕྱེ་བ།",
"Once": "",
"OneDrive": "OneDrive",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "",
"Only active when the chat input is in focus and an LLM is generating a response.": "",
"Only active when the chat input is in focus.": "",
@@ -1556,6 +1583,7 @@
"PDF document (.pdf)": "PDF ཡིག་ཆ། (.pdf)",
"PDF Extract Images (OCR)": "PDF པར་འདོན་སྤེལ། (OCR)",
"PDF Loader Mode": "",
"pdf, docx, pptx, xlsx": "",
"pending": "སྒུག་བཞིན་པ།",
"Pending": "",
"Pending User Overlay Content": "",
@@ -1617,6 +1645,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "སྔོན་སྦྱོར་ ID ནི་དཔེ་དབྱིབས་ཀྱི་ IDs ལ་སྔོན་སྦྱོར་ཞིག་སྣོན་ནས་སྦྲེལ་མཐུད་གཞན་དང་གདོང་ཐུག་ལས་གཡོལ་བར་བེད་སྤྱོད་བྱེད། - ནུས་མེད་བཏང་བར་སྟོང་པ་བཞག་པ།",
"Prevent File Creation": "",
"Preview": "",
"Preview Access": "",
"Previous 30 days": "ཉིན་ ༣༠ སྔོན་མ།",
"Previous 7 days": "ཉིན་ ༧ སྔོན་མ།",
"Previous message": "",
@@ -1694,6 +1723,7 @@
"Remove from favorites": "",
"Remove image": "",
"Remove Model": "དཔེ་དབྱིབས་འདོར་བ།",
"Removing {{count}} stale files..._other": "",
"Rename": "མིང་བསྐྱར་འདོགས།",
"Renamed to {{name}}": "",
"Render Markdown in Assistant Messages": "",
@@ -1712,6 +1742,7 @@
"Reset": "སླར་སྒྲིག",
"Reset All Models": "དཔེ་དབྱིབས་ཡོངས་རྫོགས་སླར་སྒྲིག",
"Reset Image": "བརྙན་རིས་བསྐྱར་སྒྲིག",
"Reset knowledge base?": "",
"Reset Upload Directory": "སྤར་བའི་ཐོ་འཚོལ་སླར་སྒྲིག",
"Reset Vector Storage/Knowledge": "ཚད་བརྡའི་གསོག་ཆས།/ཤེས་བྱ་སླར་སྒྲིག",
"Reset view": "མཐོང་སྣང་སླར་སྒྲིག",
@@ -1778,6 +1809,7 @@
"Search Prompts": "འགུལ་སློང་འཚོལ་བཤེར།",
"Search Result Count": "འཚོལ་བཤེར་འབྲས་བུའི་གྲངས།",
"Search Skills": "",
"Search skills...": "",
"Search the internet": "དྲ་རྒྱ་འཚོལ་བཤེར།",
"Search the web and fetch URLs": "",
"Search Tools": "ལག་ཆ་འཚོལ་བཤེར།",
@@ -1974,6 +2006,8 @@
"Switch to JSON editor": "",
"Switch to visual editor": "",
"Sync": "",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "",
"Sync directory": "ཐོ་འཚོལ་མཉམ་སྡེབ།",
"Sync Failed": "",
@@ -2046,7 +2080,6 @@
"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.": "འདེམས་ཀ་འདིས་ནང་དོན་གསར་སྒྱུར་བྱེད་སྐབས་ཊོཀ་ཀེན་ག་ཚོད་ཉར་ཚགས་བྱེད་དགོས་ཚོད་འཛིན་བྱེད། དཔེར་ན། གལ་ཏེ་ ༢ ལ་བཀོད་སྒྲིག་བྱས་ན། ཁ་བརྡའི་ནང་དོན་གྱི་ཊོཀ་ཀེན་མཐའ་མ་ ༢ ཉར་ཚགས་བྱེད་ངེས། ནང་དོན་ཉར་ཚགས་བྱས་ན་ཁ་བརྡའི་རྒྱུན་མཐུད་རང་བཞིན་རྒྱུན་སྲུང་བྱེད་པར་རོགས་པ་བྱེད་ཐུབ། འོན་ཀྱང་དེས་བརྗོད་གཞི་གསར་པར་ལན་འདེབས་བྱེད་པའི་ནུས་པ་ཉུང་དུ་གཏོང་སྲིད།",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "",
"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.": "འདེམས་ཀ་འདིས་དཔེ་དབྱིབས་ཀྱིས་དེའི་ལན་ནང་བཟོ་ཐུབ་པའི་ཊོཀ་ཀེན་གྱི་གྲངས་མང་ཤོས་འཇོག་པ། ཚད་བཀག་འདི་མང་དུ་བཏང་ན་དཔེ་དབྱིབས་ཀྱིས་ལན་རིང་བ་སྤྲོད་པར་གནང་བ་སྤྲོད། འོན་ཀྱང་དེས་ཕན་ཐོགས་མེད་པའམ་འབྲེལ་མེད་ཀྱི་ནང་དོན་བཟོ་བའི་ཆགས་ཚུལ་མང་དུ་གཏོང་སྲིད།",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "འདེམས་ཀ་འདིས་བསྡུ་གསོག་ནང་གི་ཡོད་པའི་ཡིག་ཆ་ཡོངས་རྫོགས་བསུབ་ནས་དེ་དག་གསར་དུ་སྤར་བའི་ཡིག་ཆས་ཚབ་བྱེད་ངེས།",
"This response was generated by \"{{model}}\"": "ལན་འདི་ \"{{model}}\" ཡིས་བཟོས་པ།",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "",
"This will delete": "འདིས་བསུབ་ངེས།",
@@ -2054,7 +2087,7 @@
"This will delete all models including custom models": "འདིས་སྲོལ་བཟོས་དཔེ་དབྱིབས་ཚུད་པའི་དཔེ་དབྱིབས་ཡོངས་རྫོགས་བསུབ་ངེས།",
"This will delete all models including custom models and cannot be undone.": "འདིས་སྲོལ་བཟོས་དཔེ་དབྱིབས་ཚུད་པའི་དཔེ་དབྱིབས་ཡོངས་རྫོགས་བསུབ་ངེས་པ་དང་ཕྱིར་ལྡོག་བྱེད་མི་ཐུབ།",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "འདིས་ཤེས་བྱའི་རྟེན་གཞི་སླར་སྒྲིག་བྱས་ནས་ཡིག་ཆ་ཡོངས་རྫོགས་མཉམ་སྡེབ་བྱེད་ངེས། ཁྱེད་མུ་མཐུད་འདོད་ཡོད་དམ།",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "འགྲེལ་བཤད་ཞིབ་ཚགས།",
"Thought": "",
"Thought for {{DURATION}}": "{{DURATION}} རིང་བསམས།",
@@ -2090,6 +2123,7 @@
"Toggle 1 source": "",
"Toggle details": "",
"Toggle Dictation": "",
"Toggle Mute": "",
"Toggle Sidebar": "",
"Toggle status history": "",
"Toggle whether current connection is active.": "",
@@ -2168,7 +2202,7 @@
"Upload Progress": "སྤར་བའི་འཕེལ་རིམ།",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "",
"Uploaded files or images": "",
"Uploading file...": "",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "",
"URL": "URL",
"URL is required": "",
@@ -2188,6 +2222,7 @@
"User Groups": "",
"User location successfully retrieved.": "བེད་སྤྱོད་མཁན་གནས་ཡུལ་ལེགས་པར་ལེན་ཚུར་སྒྲུབ་བྱས།",
"User menu": "",
"User Preview": "",
"User ratings (thumbs up/down)": "",
"User Status": "",
"User Webhooks": "བེད་སྤྱོད་མཁན་གྱི་ Webhooks",
+48 -5
View File
@@ -9,12 +9,19 @@
"[Today at] h:mm A": "",
"[Yesterday at] h:mm A": "",
"{{ models }}": "{{ modeli }}",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "",
"{{COUNT}} characters": "",
"{{COUNT}} extracted lines": "",
"{{COUNT}} files": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_few": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "",
"{{COUNT}} members": "",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_few": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "",
"{{COUNT}} Rows": "",
"{{count}} selected_one": "",
@@ -194,6 +201,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "",
"Are you sure you want to delete this channel?": "",
"Are you sure you want to delete this connection? This action cannot be undone.": "",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "",
"Are you sure you want to delete this message?": "",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "",
@@ -240,6 +248,7 @@
"Automations": "",
"Available list": "",
"Available models": "",
"Available Skills": "",
"Available Tools": "",
"available users": "dostupni korisnici",
"available!": "dostupno!",
@@ -399,13 +408,18 @@
"ComfyUI Workflow": "",
"ComfyUI Workflow Nodes": "",
"Comma separated Node Ids (e.g. 1 or 1,2)": "",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "",
"Command": "Naredba",
"Comment": "Komentar",
"Commit Message": "",
"Community Reviews": "",
"Comparing with knowledge base...": "",
"Completions": "",
"Compress Images in Channels": "",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_few": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "Istodobni zahtjevi",
"Config": "",
"Config imported successfully": "",
@@ -538,12 +552,14 @@
"Delete a model": "Izbriši model",
"Delete All": "",
"Delete All Chats": "Izbriši sve razgovore",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "",
"Delete automation?": "",
"Delete calendar": "",
"Delete Calendar": "",
"Delete Chat": "Izbriši razgovor",
"Delete chat?": "",
"Delete directory?": "",
"Delete Event": "",
"Delete File": "",
"Delete folder?": "",
@@ -580,6 +596,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "",
"Direct Message": "",
"Direct Tool Servers": "",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "",
"Disable All": "",
"Disable Code Interpreter": "",
@@ -688,6 +709,7 @@
"Embedding Concurrent Requests": "",
"Embedding Model": "Embedding model",
"Embedding Model Engine": "Embedding model pogon",
"Emoji": "",
"Emojis": "",
"Empty message": "",
"Enable All": "",
@@ -766,6 +788,7 @@
"Enter Kagi Search API Key": "",
"Enter Key Behavior": "",
"Enter language codes": "Unesite kodove jezika",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "",
"Enter Mistral API Base URL": "",
"Enter Mistral API Key": "",
@@ -902,6 +925,7 @@
"Failed to archive chat.": "",
"Failed to attach file": "",
"Failed to clear status": "",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to connect to {{URL}} terminal server": "",
"Failed to copy link": "",
@@ -955,14 +979,16 @@
"File content updated successfully.": "",
"File Context": "",
"File deleted successfully.": "",
"File Extensions": "",
"File Mode": "Način datoteke",
"File moved.": "",
"File name": "",
"File not found.": "Datoteka nije pronađena.",
"File removed successfully.": "",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "",
"File Upload": "",
"File uploaded successfully": "",
"File uploaded!": "",
"Filename": "",
"Files": "",
"Filter": "",
@@ -1178,13 +1204,13 @@
"Knowledge": "Znanje",
"Knowledge Access": "",
"Knowledge Base": "",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "",
"Knowledge deleted successfully.": "",
"Knowledge Description": "",
"Knowledge exported successfully": "",
"Knowledge Name": "",
"Knowledge Public Sharing": "",
"Knowledge reset successfully.": "",
"Knowledge Sharing": "",
"Knowledge updated successfully": "",
"Kokoro.js (Browser)": "",
@@ -1228,6 +1254,7 @@
"Light": "Svijetlo",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "",
"Linkup API Key": "",
"List": "",
"List calendars, search, create, update, and delete calendar events": "",
"Listening...": "Slušam...",
@@ -1378,6 +1405,8 @@
"New calendar": "",
"New Calendar": "",
"New Chat": "Novi razgovor",
"New directory": "",
"New Directory": "",
"New Event": "",
"New File": "",
"New Folder": "",
@@ -1423,11 +1452,13 @@
"No HTML, CSS, or JavaScript content found.": "",
"No inference engine with management support found": "",
"No kernel": "",
"No knowledge bases accessible": "",
"No knowledge bases found.": "",
"No knowledge found": "",
"No limit": "",
"No memories to clear": "",
"No model IDs": "",
"No models accessible": "",
"No models available": "",
"No models found": "",
"No models selected": "",
@@ -1448,6 +1479,7 @@
"No Terminal connection configured.": "",
"No terminal connections configured.": "",
"No tool server connections configured.": "",
"No tools accessible": "",
"No tools found": "",
"No users were found.": "",
"No valves": "",
@@ -1487,6 +1519,7 @@
"On": "Uključeno",
"Once": "",
"OneDrive": "",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "",
"Only active when the chat input is in focus and an LLM is generating a response.": "",
"Only active when the chat input is in focus.": "",
@@ -1558,6 +1591,7 @@
"PDF document (.pdf)": "PDF dokument (.pdf)",
"PDF Extract Images (OCR)": "PDF izdvajanje slika (OCR)",
"PDF Loader Mode": "",
"pdf, docx, pptx, xlsx": "",
"pending": "u tijeku",
"Pending": "",
"Pending User Overlay Content": "",
@@ -1619,6 +1653,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "",
"Prevent File Creation": "",
"Preview": "",
"Preview Access": "",
"Previous 30 days": "Prethodnih 30 dana",
"Previous 7 days": "Prethodnih 7 dana",
"Previous message": "",
@@ -1696,6 +1731,9 @@
"Remove from favorites": "",
"Remove image": "",
"Remove Model": "Ukloni model",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._few": "",
"Removing {{count}} stale files..._other": "",
"Rename": "Preimenuj",
"Renamed to {{name}}": "",
"Render Markdown in Assistant Messages": "",
@@ -1714,6 +1752,7 @@
"Reset": "",
"Reset All Models": "",
"Reset Image": "Resetiraj sliku",
"Reset knowledge base?": "",
"Reset Upload Directory": "Poništi upload direktorij",
"Reset Vector Storage/Knowledge": "",
"Reset view": "",
@@ -1782,6 +1821,7 @@
"Search Prompts": "Pretraga prompta",
"Search Result Count": "Broj rezultata pretraživanja",
"Search Skills": "",
"Search skills...": "",
"Search the internet": "",
"Search the web and fetch URLs": "",
"Search Tools": "Alati za pretraživanje",
@@ -1980,6 +2020,8 @@
"Switch to JSON editor": "",
"Switch to visual editor": "",
"Sync": "",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "",
"Sync directory": "",
"Sync Failed": "",
@@ -2052,7 +2094,6 @@
"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.": "",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "",
"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.": "",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
"This response was generated by \"{{model}}\"": "",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "",
"This will delete": "",
@@ -2060,7 +2101,7 @@
"This will delete all models including custom models": "",
"This will delete all models including custom models and cannot be undone.": "",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "Detaljno objašnjenje",
"Thought": "",
"Thought for {{DURATION}}": "",
@@ -2096,6 +2137,7 @@
"Toggle 1 source": "",
"Toggle details": "",
"Toggle Dictation": "",
"Toggle Mute": "",
"Toggle Sidebar": "",
"Toggle status history": "",
"Toggle whether current connection is active.": "",
@@ -2174,7 +2216,7 @@
"Upload Progress": "Napredak učitavanja",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "",
"Uploaded files or images": "",
"Uploading file...": "",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "",
"URL": "",
"URL is required": "",
@@ -2194,6 +2236,7 @@
"User Groups": "",
"User location successfully retrieved.": "",
"User menu": "",
"User Preview": "",
"User ratings (thumbs up/down)": "",
"User Status": "",
"User Webhooks": "",
+48 -5
View File
@@ -9,12 +9,19 @@
"[Today at] h:mm A": "[Avui a les] h:mm A",
"[Yesterday at] h:mm A": "[Ahir a les] h:mm A",
"{{ models }}": "{{ models }}",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "{{COUNT}} eines disponibles",
"{{COUNT}} characters": "{{COUNT}} caràcters",
"{{COUNT}} extracted lines": "{{COUNT}} línies extretes",
"{{COUNT}} files": "{{COUNT}} arxius",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_many": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "{{COUNT}} línies ocultes",
"{{COUNT}} members": "{{COUNT}} membres",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_many": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "{{COUNT}} respostes",
"{{COUNT}} Rows": "{{COUNT}} files",
"{{count}} selected_one": "{{count}} seleccionat",
@@ -194,6 +201,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "Estàs segur que vols suprimir tots els xats? Aquesta acció no es pot desfer.",
"Are you sure you want to delete this channel?": "Estàs segur que vols eliminar aquest canal?",
"Are you sure you want to delete this connection? This action cannot be undone.": "Estàs segur que vols suprimir aquesta connexió? Aquesta acció no es pot desfer.",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "Estàs segur que vols suprimir aquest record? Aquesta acció no es pot desfer.",
"Are you sure you want to delete this message?": "Estàs segur que vols eliminar aquest missatge?",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "Estàs segur que vols suprimir aquesta versió? Les versions filles es tornaran a enllaçar amb la versió principal d'aquesta versió.",
@@ -240,6 +248,7 @@
"Automations": "Automatització",
"Available list": "Llista de disponibles",
"Available models": "Models disponibles",
"Available Skills": "",
"Available Tools": "Eines disponibles",
"available users": "usuaris disponibles",
"available!": "disponible!",
@@ -399,13 +408,18 @@
"ComfyUI Workflow": "Flux de treball de ComfyUI",
"ComfyUI Workflow Nodes": "Nodes del flux de treball de ComfyUI",
"Comma separated Node Ids (e.g. 1 or 1,2)": "Identificadors de node separats per comes (p. ex. 1 o 1,2)",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "comanda",
"Command": "Comanda",
"Comment": "Comentari",
"Commit Message": "Enviar el missatge",
"Community Reviews": "Comentaris de la comunitat",
"Comparing with knowledge base...": "",
"Completions": "Completaments",
"Compress Images in Channels": "Comprimir imatges en els canals",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_many": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "Peticions simultànies",
"Config": "Configuració",
"Config imported successfully": "Configuració importada correctament",
@@ -538,12 +552,14 @@
"Delete a model": "Eliminar un model",
"Delete All": "Eliminar tot",
"Delete All Chats": "Eliminar tots els xats",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "Eliminar tot el contingut d'aquesta carpeta",
"Delete automation?": "Eliminar l'automatització",
"Delete calendar": "Eliminar el calendari",
"Delete Calendar": "Eliminar el calendari",
"Delete Chat": "Eliminar xat",
"Delete chat?": "Eliminar el xat?",
"Delete directory?": "",
"Delete Event": "Eliminar l'esdeveniment",
"Delete File": "Eliminar el fitxer",
"Delete folder?": "Eliminar la carpeta?",
@@ -580,6 +596,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Les connexions directes permeten als usuaris connectar-se als seus propis endpoints d'API compatibles amb OpenAI.",
"Direct Message": "Missatge directe",
"Direct Tool Servers": "Servidors d'eines directes",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "La selecció de directori s'ha cancel·lat",
"Disable All": "Deshabilitar tot",
"Disable Code Interpreter": "Deshabilitar l'interpret de codi",
@@ -688,6 +709,7 @@
"Embedding Concurrent Requests": "Peticions concurrents d'incrustació",
"Embedding Model": "Model d'incrustació",
"Embedding Model Engine": "Motor de model d'incrustació",
"Emoji": "",
"Emojis": "Emojis",
"Empty message": "Missatge buit",
"Enable All": "Habilitar tot",
@@ -766,6 +788,7 @@
"Enter Kagi Search API Key": "Introdueix la clau API de Kagi Search",
"Enter Key Behavior": "Introdueix el comportament de clau",
"Enter language codes": "Introdueix els codis de llenguatge",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "Introdueix la clau API de MinerU",
"Enter Mistral API Base URL": "Entra la URL Base de l'API de Mistral",
"Enter Mistral API Key": "Entra la clau API de Mistral",
@@ -902,6 +925,7 @@
"Failed to archive chat.": "No s'ha pogut arxivar el xat",
"Failed to attach file": "No s'ha pogut adjuntar l'arxiu",
"Failed to clear status": "No s'ha pogut esborar l'estat",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "No s'ha pogut connecta al servidor d'eines OpenAPI {{URL}}",
"Failed to connect to {{URL}} terminal server": "No s'ha pogut connecta al servidor de terminal {{URL}}",
"Failed to copy link": "No s'ha pogut copiar l'enllaç",
@@ -955,14 +979,16 @@
"File content updated successfully.": "El contingut de l'arxiu s'ha actualitzat correctament.",
"File Context": "Contingut de l'arxiu",
"File deleted successfully.": "L'arxiu s'ha eliminat correctament",
"File Extensions": "",
"File Mode": "Mode d'arxiu",
"File moved.": "",
"File name": "Nom d'arxiu",
"File not found.": "No s'ha trobat l'arxiu.",
"File removed successfully.": "Arxiu eliminat correctament.",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "La mida del fitxer no ha de superar els {{maxSize}} MB.",
"File Upload": "Pujar arxiu",
"File uploaded successfully": "Arxiu pujat satisfactòriament",
"File uploaded!": "Arxiu pujat!",
"Filename": "Nom de l'arxiu",
"Files": "Arxius",
"Filter": "Filtre",
@@ -1178,13 +1204,13 @@
"Knowledge": "Coneixement",
"Knowledge Access": "Accés al coneixement",
"Knowledge Base": "Base de coneixement",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "Coneixement creat correctament.",
"Knowledge deleted successfully.": "Coneixement eliminat correctament.",
"Knowledge Description": "Descripció del coneixement",
"Knowledge exported successfully": "El coneixement s'ha exportat correctament",
"Knowledge Name": "Nom del coneixement",
"Knowledge Public Sharing": "Compartir públicament el Coneixement",
"Knowledge reset successfully.": "Coneixement restablert correctament.",
"Knowledge Sharing": "Compartir el coneixement",
"Knowledge updated successfully": "Coneixement actualitzat correctament.",
"Kokoro.js (Browser)": "Kokoro.js (Navegador)",
@@ -1228,6 +1254,7 @@
"Light": "Clar",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "Limita les consultes de cerca simultànies. 0 = il·limitada (per defecte). Estableix-ho a 1 per a l'execució seqüencial (recomanat per a API amb límits de velocitat estrictes com el nivell gratuït de Brave).",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "Limita el nombre de sol·licituds d'incrustació simultànies. Estableix-ho a 0 per a un nombre il·limitat.",
"Linkup API Key": "",
"List": "Llista",
"List calendars, search, create, update, and delete calendar events": "Llistar calendaris, cercar, crear, actualitzar i suprimir esdeveniments de calendari",
"Listening...": "Escoltant...",
@@ -1378,6 +1405,8 @@
"New calendar": "Nou calendari",
"New Calendar": "Nou calendari",
"New Chat": "Nou xat",
"New directory": "",
"New Directory": "",
"New Event": "Nou esdeveniment",
"New File": "Nou arxiu",
"New Folder": "Nova carpeta",
@@ -1423,11 +1452,13 @@
"No HTML, CSS, or JavaScript content found.": "No s'ha trobat contingut HTML, CSS o JavaScript.",
"No inference engine with management support found": "No s'ha trobat un motor d'inferència amb suport de gestió",
"No kernel": "No hi ha cap kernel",
"No knowledge bases accessible": "",
"No knowledge bases found.": "No s'han trobat bases de coneixement.",
"No knowledge found": "No s'ha trobat Coneixement",
"No limit": "Sense límit",
"No memories to clear": "No hi ha memòries per netejar",
"No model IDs": "No hi ha IDs de model",
"No models accessible": "",
"No models available": "No hi ha models disponibles",
"No models found": "No s'han trobat models",
"No models selected": "No s'ha seleccionat cap model",
@@ -1448,6 +1479,7 @@
"No Terminal connection configured.": "No hi ha cap configuració de terminal configurada.",
"No terminal connections configured.": "No hi ha connexions de terminal configurades.",
"No tool server connections configured.": "No hi ha connexions a servidors d'eines configurades.",
"No tools accessible": "",
"No tools found": "No s'han trobat eines",
"No users were found.": "No s'han trobat usuaris",
"No valves": "No hi ha valves",
@@ -1487,6 +1519,7 @@
"On": "Activat",
"Once": "Una vegada",
"OneDrive": "OneDrive",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "Només està actiu quan l'opció \"Enganxa text gran com a fitxer\" està activada.",
"Only active when the chat input is in focus and an LLM is generating a response.": "Només s'activa quan l'entrada del xat està en focus i un LLM està generant una resposta.",
"Only active when the chat input is in focus.": "Només actiu quan l'entrada del xat està en focus.",
@@ -1558,6 +1591,7 @@
"PDF document (.pdf)": "Document PDF (.pdf)",
"PDF Extract Images (OCR)": "Extreu imatges del PDF (OCR)",
"PDF Loader Mode": "Mode de càrrega de PDF",
"pdf, docx, pptx, xlsx": "",
"pending": "pendent",
"Pending": "Pendent",
"Pending User Overlay Content": "Contingut de la finestra d'usuari pendent",
@@ -1619,6 +1653,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "L'identificador de prefix s'utilitza per evitar conflictes amb altres connexions afegint un prefix als ID de model; deixa'l en blanc per desactivar-lo.",
"Prevent File Creation": "Prevenir la creació d'arxius",
"Preview": "Previsualització",
"Preview Access": "",
"Previous 30 days": "30 dies anteriors",
"Previous 7 days": "7 dies anteriors",
"Previous message": "Missatge anterior",
@@ -1696,6 +1731,9 @@
"Remove from favorites": "Eliminar dels favorits",
"Remove image": "Eliminar imatge",
"Remove Model": "Eliminar el model",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._many": "",
"Removing {{count}} stale files..._other": "",
"Rename": "Canviar el nom",
"Renamed to {{name}}": "S'ha renombrat a {{name}}",
"Render Markdown in Assistant Messages": "Renderitzar el Markdown dels missatges de l'assistent",
@@ -1714,6 +1752,7 @@
"Reset": "Restableix",
"Reset All Models": "Restablir tots els models",
"Reset Image": "Restableix la imatge",
"Reset knowledge base?": "",
"Reset Upload Directory": "Restableix el directori de pujades",
"Reset Vector Storage/Knowledge": "Restableix el Repositori de vectors/Coneixement",
"Reset view": "Netejar la vista",
@@ -1782,6 +1821,7 @@
"Search Prompts": "Cercar indicacions",
"Search Result Count": "Recompte de resultats de cerca",
"Search Skills": "Cerca habilitats",
"Search skills...": "",
"Search the internet": "Cercar a internet",
"Search the web and fetch URLs": "Cerca la web i obté les URL",
"Search Tools": "Cercar eines",
@@ -1980,6 +2020,8 @@
"Switch to JSON editor": "Canviar a l'editor JSON",
"Switch to visual editor": "Canviar a l'editor visual",
"Sync": "Sincronitzar",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "Sincronia completada",
"Sync directory": "Sincronitzar directori",
"Sync Failed": "La sincronia ha fallat",
@@ -2052,7 +2094,6 @@
"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.": "Aquesta opció controla quants tokens es conserven en actualitzar el context. Per exemple, si s'estableix en 2, es conservaran els darrers 2 tokens del context de conversa. Preservar el context pot ajudar a mantenir la continuïtat d'una conversa, però pot reduir la capacitat de respondre a nous temes.",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "Aquesta opció activa o desactiva l'ús de la funció de raonament a Ollama, que permet que el model pensi abans de generar una resposta. Quan està activada, el model pot trigar una estona en processar el context de la conversa i generar una resposta més reflexiva.",
"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.": "Aquesta opció estableix el nombre màxim de tokens que el model pot generar en la seva resposta. Augmentar aquest límit permet que el model proporcioni respostes més llargues, però també pot augmentar la probabilitat que es generi contingut poc útil o irrellevant.",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Aquesta opció eliminarà tots els fitxers existents de la col·lecció i els substituirà per fitxers recentment penjats.",
"This response was generated by \"{{model}}\"": "Aquesta resposta l'ha generat el model \"{{model}}\"",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "Aquesta plantilla conté diversos marcadors de posició de context ([context] o {{CONTEXT}}). El context s'injectarà a cada aparició.",
"This will delete": "Això eliminarà",
@@ -2060,7 +2101,7 @@
"This will delete all models including custom models": "Això eliminarà tots els models incloent els personalitzats",
"This will delete all models including custom models and cannot be undone.": "Això eliminarà tots els models incloent els personalitzats i no es pot desfer",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "Això eliminarà permanentment el calendari \"{{name}}\" i tots els seus esdeveniments. Aquesta acció no es pot desfer.",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "Això restablirà la base de coneixement i sincronitzarà tots els fitxers. Vols continuar?",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "Explicació en detall",
"Thought": "Pensament",
"Thought for {{DURATION}}": "He pensat durant {{DURATION}}",
@@ -2096,6 +2137,7 @@
"Toggle 1 source": "Activa/Desactiva 1 font",
"Toggle details": "Activar/Desactivar els detalls",
"Toggle Dictation": "Activa/Desactiva el dictat",
"Toggle Mute": "",
"Toggle Sidebar": "Activa/Desactiva la barra lateral",
"Toggle status history": "Activa/Desactiva l'estat de l'històric",
"Toggle whether current connection is active.": "Alterna si la connexió actual està activa.",
@@ -2174,7 +2216,7 @@
"Upload Progress": "Progrés de càrrega",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "Progrés de la pujada: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)",
"Uploaded files or images": "Arxius o imatges pujats",
"Uploading file...": "Pujant l'arxiu...",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "Pujant...",
"URL": "URL",
"URL is required": "La URL és necessaria",
@@ -2194,6 +2236,7 @@
"User Groups": "Grups d'usuari",
"User location successfully retrieved.": "Ubicació de l'usuari obtinguda correctament",
"User menu": "Menú d'usuari",
"User Preview": "",
"User ratings (thumbs up/down)": "Valoracions dels usuaris (polze amunt/avall)",
"User Status": "Estats d'usuari",
"User Webhooks": "Webhooks d'usuari",
+44 -5
View File
@@ -9,12 +9,17 @@
"[Today at] h:mm A": "",
"[Yesterday at] h:mm A": "",
"{{ models }}": "",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "",
"{{COUNT}} characters": "",
"{{COUNT}} extracted lines": "",
"{{COUNT}} files": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "",
"{{COUNT}} members": "",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "",
"{{COUNT}} Rows": "",
"{{count}} selected_one": "",
@@ -193,6 +198,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "",
"Are you sure you want to delete this channel?": "",
"Are you sure you want to delete this connection? This action cannot be undone.": "",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "",
"Are you sure you want to delete this message?": "",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "",
@@ -239,6 +245,7 @@
"Automations": "",
"Available list": "",
"Available models": "",
"Available Skills": "",
"Available Tools": "",
"available users": "magamit nga mga tiggamit",
"available!": "magamit!",
@@ -398,13 +405,17 @@
"ComfyUI Workflow": "",
"ComfyUI Workflow Nodes": "",
"Comma separated Node Ids (e.g. 1 or 1,2)": "",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "",
"Command": "Pag-order",
"Comment": "",
"Commit Message": "",
"Community Reviews": "",
"Comparing with knowledge base...": "",
"Completions": "",
"Compress Images in Channels": "",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "",
"Config": "",
"Config imported successfully": "",
@@ -537,12 +548,14 @@
"Delete a model": "Pagtangtang sa usa ka template",
"Delete All": "",
"Delete All Chats": "",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "",
"Delete automation?": "",
"Delete calendar": "",
"Delete Calendar": "",
"Delete Chat": "",
"Delete chat?": "",
"Delete directory?": "",
"Delete Event": "",
"Delete File": "",
"Delete folder?": "",
@@ -579,6 +592,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "",
"Direct Message": "",
"Direct Tool Servers": "",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "",
"Disable All": "",
"Disable Code Interpreter": "",
@@ -687,6 +705,7 @@
"Embedding Concurrent Requests": "",
"Embedding Model": "",
"Embedding Model Engine": "",
"Emoji": "",
"Emojis": "",
"Empty message": "",
"Enable All": "",
@@ -765,6 +784,7 @@
"Enter Kagi Search API Key": "",
"Enter Key Behavior": "",
"Enter language codes": "",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "",
"Enter Mistral API Base URL": "",
"Enter Mistral API Key": "",
@@ -901,6 +921,7 @@
"Failed to archive chat.": "",
"Failed to attach file": "",
"Failed to clear status": "",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to connect to {{URL}} terminal server": "",
"Failed to copy link": "",
@@ -954,14 +975,16 @@
"File content updated successfully.": "",
"File Context": "",
"File deleted successfully.": "",
"File Extensions": "",
"File Mode": "File mode",
"File moved.": "",
"File name": "",
"File not found.": "Wala makit-an ang file.",
"File removed successfully.": "",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "",
"File Upload": "",
"File uploaded successfully": "",
"File uploaded!": "",
"Filename": "",
"Files": "",
"Filter": "",
@@ -1177,13 +1200,13 @@
"Knowledge": "",
"Knowledge Access": "",
"Knowledge Base": "",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "",
"Knowledge deleted successfully.": "",
"Knowledge Description": "",
"Knowledge exported successfully": "",
"Knowledge Name": "",
"Knowledge Public Sharing": "",
"Knowledge reset successfully.": "",
"Knowledge Sharing": "",
"Knowledge updated successfully": "",
"Kokoro.js (Browser)": "",
@@ -1227,6 +1250,7 @@
"Light": "Kahayag",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "",
"Linkup API Key": "",
"List": "",
"List calendars, search, create, update, and delete calendar events": "",
"Listening...": "",
@@ -1377,6 +1401,8 @@
"New calendar": "",
"New Calendar": "",
"New Chat": "Bag-ong diskusyon",
"New directory": "",
"New Directory": "",
"New Event": "",
"New File": "",
"New Folder": "",
@@ -1422,11 +1448,13 @@
"No HTML, CSS, or JavaScript content found.": "",
"No inference engine with management support found": "",
"No kernel": "",
"No knowledge bases accessible": "",
"No knowledge bases found.": "",
"No knowledge found": "",
"No limit": "",
"No memories to clear": "",
"No model IDs": "",
"No models accessible": "",
"No models available": "",
"No models found": "",
"No models selected": "",
@@ -1447,6 +1475,7 @@
"No Terminal connection configured.": "",
"No terminal connections configured.": "",
"No tool server connections configured.": "",
"No tools accessible": "",
"No tools found": "",
"No users were found.": "",
"No valves": "",
@@ -1486,6 +1515,7 @@
"On": "Gipaandar",
"Once": "",
"OneDrive": "",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "",
"Only active when the chat input is in focus and an LLM is generating a response.": "",
"Only active when the chat input is in focus.": "",
@@ -1557,6 +1587,7 @@
"PDF document (.pdf)": "",
"PDF Extract Images (OCR)": "PDF Image Extraction (OCR)",
"PDF Loader Mode": "",
"pdf, docx, pptx, xlsx": "",
"pending": "gipugngan",
"Pending": "",
"Pending User Overlay Content": "",
@@ -1618,6 +1649,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "",
"Prevent File Creation": "",
"Preview": "",
"Preview Access": "",
"Previous 30 days": "",
"Previous 7 days": "",
"Previous message": "",
@@ -1695,6 +1727,8 @@
"Remove from favorites": "",
"Remove image": "",
"Remove Model": "",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._other": "",
"Rename": "",
"Renamed to {{name}}": "",
"Render Markdown in Assistant Messages": "",
@@ -1713,6 +1747,7 @@
"Reset": "",
"Reset All Models": "",
"Reset Image": "I-reset ang hulagway",
"Reset knowledge base?": "",
"Reset Upload Directory": "",
"Reset Vector Storage/Knowledge": "",
"Reset view": "",
@@ -1780,6 +1815,7 @@
"Search Prompts": "Pangitaa ang mga prompt",
"Search Result Count": "",
"Search Skills": "",
"Search skills...": "",
"Search the internet": "",
"Search the web and fetch URLs": "",
"Search Tools": "",
@@ -1977,6 +2013,8 @@
"Switch to JSON editor": "",
"Switch to visual editor": "",
"Sync": "",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "",
"Sync directory": "",
"Sync Failed": "",
@@ -2049,7 +2087,6 @@
"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.": "",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "",
"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.": "",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
"This response was generated by \"{{model}}\"": "",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "",
"This will delete": "",
@@ -2057,7 +2094,7 @@
"This will delete all models including custom models": "",
"This will delete all models including custom models and cannot be undone.": "",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "",
"Thought": "",
"Thought for {{DURATION}}": "",
@@ -2093,6 +2130,7 @@
"Toggle 1 source": "",
"Toggle details": "",
"Toggle Dictation": "",
"Toggle Mute": "",
"Toggle Sidebar": "",
"Toggle status history": "",
"Toggle whether current connection is active.": "",
@@ -2171,7 +2209,7 @@
"Upload Progress": "Pag-uswag sa Pag-upload",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "",
"Uploaded files or images": "",
"Uploading file...": "",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "",
"URL": "",
"URL is required": "",
@@ -2191,6 +2229,7 @@
"User Groups": "",
"User location successfully retrieved.": "",
"User menu": "",
"User Preview": "",
"User ratings (thumbs up/down)": "",
"User Status": "",
"User Webhooks": "",
+52 -5
View File
@@ -9,12 +9,21 @@
"[Today at] h:mm A": "[Dnes v] h:mm A",
"[Yesterday at] h:mm A": "[Včera v] h:mm A",
"{{ models }}": "{{ models }}",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "{{COUNT}} dostupných nástrojů",
"{{COUNT}} characters": "{{COUNT}} znaků",
"{{COUNT}} extracted lines": "",
"{{COUNT}} files": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_few": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_many": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "{{COUNT}} skrytých řádků",
"{{COUNT}} members": "",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_few": "",
"{{count}} of {{total}} accessible_many": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "{{COUNT}} odpovědí",
"{{COUNT}} Rows": "",
"{{count}} selected_one": "",
@@ -195,6 +204,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "",
"Are you sure you want to delete this channel?": "Opravdu chcete smazat tento kanál?",
"Are you sure you want to delete this connection? This action cannot be undone.": "",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "",
"Are you sure you want to delete this message?": "Opravdu chcete smazat tuto zprávu?",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "",
@@ -241,6 +251,7 @@
"Automations": "",
"Available list": "Seznam dostupných",
"Available models": "",
"Available Skills": "",
"Available Tools": "Dostupné nástroje",
"available users": "dostupní uživatelé",
"available!": "k dispozici!",
@@ -400,13 +411,19 @@
"ComfyUI Workflow": "Pracovní postup ComfyUI",
"ComfyUI Workflow Nodes": "Uzly pracovního postupu ComfyUI",
"Comma separated Node Ids (e.g. 1 or 1,2)": "ID uzlů oddělená čárkou (např. 1 nebo 1,2)",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "",
"Command": "Příkaz",
"Comment": "Komentář",
"Commit Message": "",
"Community Reviews": "",
"Comparing with knowledge base...": "",
"Completions": "Dokončení",
"Compress Images in Channels": "Komprimovat obrázky v kanálech",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_few": "",
"Computing checksums ({{count}} files)_many": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "Souběžné požadavky",
"Config": "",
"Config imported successfully": "Konfigurace byla úspěšně importována",
@@ -539,12 +556,14 @@
"Delete a model": "Smazat model",
"Delete All": "",
"Delete All Chats": "Smazat všechny konverzace",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "",
"Delete automation?": "",
"Delete calendar": "",
"Delete Calendar": "",
"Delete Chat": "Smazat konverzaci",
"Delete chat?": "Smazat konverzaci?",
"Delete directory?": "",
"Delete Event": "",
"Delete File": "",
"Delete folder?": "Smazat složku?",
@@ -581,6 +600,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Přímá připojení umožňují uživatelům připojit se k vlastním koncovým bodům API kompatibilním s OpenAI.",
"Direct Message": "",
"Direct Tool Servers": "Přímé servery nástrojů",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "Výběr adresáře byl zrušen",
"Disable All": "",
"Disable Code Interpreter": "Zakázat interpret kódu",
@@ -689,6 +713,7 @@
"Embedding Concurrent Requests": "",
"Embedding Model": "Model pro vektorizaci",
"Embedding Model Engine": "Jádro modelu pro vektorizaci",
"Emoji": "",
"Emojis": "",
"Empty message": "",
"Enable All": "",
@@ -767,6 +792,7 @@
"Enter Kagi Search API Key": "Zadejte API klíč pro Kagi Search",
"Enter Key Behavior": "Zadejte chování klávesy",
"Enter language codes": "Zadejte kódy jazyků",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "",
"Enter Mistral API Base URL": "",
"Enter Mistral API Key": "Zadejte API klíč pro Mistral",
@@ -903,6 +929,7 @@
"Failed to archive chat.": "",
"Failed to attach file": "",
"Failed to clear status": "",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "Nepodařilo se připojit k serveru nástrojů OpenAPI {{URL}}",
"Failed to connect to {{URL}} terminal server": "",
"Failed to copy link": "Nepodařilo se zkopírovat odkaz",
@@ -956,14 +983,16 @@
"File content updated successfully.": "Obsah souboru byl úspěšně aktualizován.",
"File Context": "",
"File deleted successfully.": "",
"File Extensions": "",
"File Mode": "Režim souboru",
"File moved.": "",
"File name": "",
"File not found.": "Soubor nenalezen.",
"File removed successfully.": "Soubor byl úspěšně odstraněn.",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "Velikost souboru by neměla překročit {{maxSize}} MB.",
"File Upload": "Nahrání souboru",
"File uploaded successfully": "Soubor byl úspěšně nahrán",
"File uploaded!": "",
"Filename": "",
"Files": "Soubory",
"Filter": "Filtr",
@@ -1179,13 +1208,13 @@
"Knowledge": "Znalosti",
"Knowledge Access": "Přístup ke znalostem",
"Knowledge Base": "Znalostní báze",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "Znalost byla úspěšně vytvořena.",
"Knowledge deleted successfully.": "Znalost byla úspěšně smazána.",
"Knowledge Description": "Popis znalosti",
"Knowledge exported successfully": "",
"Knowledge Name": "Název znalosti",
"Knowledge Public Sharing": "Veřejné sdílení znalostí",
"Knowledge reset successfully.": "Znalosti byly úspěšně resetovány.",
"Knowledge Sharing": "",
"Knowledge updated successfully": "Znalost byla úspěšně aktualizována",
"Kokoro.js (Browser)": "Kokoro.js (prohlížeč)",
@@ -1229,6 +1258,7 @@
"Light": "Světlý",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "",
"Linkup API Key": "",
"List": "",
"List calendars, search, create, update, and delete calendar events": "",
"Listening...": "Poslouchám...",
@@ -1379,6 +1409,8 @@
"New calendar": "",
"New Calendar": "",
"New Chat": "Nová konverzace",
"New directory": "",
"New Directory": "",
"New Event": "",
"New File": "",
"New Folder": "Nová složka",
@@ -1424,11 +1456,13 @@
"No HTML, CSS, or JavaScript content found.": "Nebyl nalezen žádný obsah HTML, CSS ani JavaScriptu.",
"No inference engine with management support found": "Nebyl nalezeno žádné inferenční jádro s podporou správy",
"No kernel": "",
"No knowledge bases accessible": "",
"No knowledge bases found.": "",
"No knowledge found": "Nebyly nalezeny žádné znalosti",
"No limit": "",
"No memories to clear": "Žádné vzpomínky k vymazání",
"No model IDs": "Žádná ID modelů",
"No models accessible": "",
"No models available": "",
"No models found": "Nebyly nalezeny žádné modely",
"No models selected": "Nebyly vybrány žádné modely",
@@ -1449,6 +1483,7 @@
"No Terminal connection configured.": "",
"No terminal connections configured.": "",
"No tool server connections configured.": "",
"No tools accessible": "",
"No tools found": "Nebyly nalezeny žádné nástroje",
"No users were found.": "Nebyli nalezeni žádní uživatelé.",
"No valves": "Žádné valves",
@@ -1488,6 +1523,7 @@
"On": "Zapnuto",
"Once": "",
"OneDrive": "OneDrive",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "",
"Only active when the chat input is in focus and an LLM is generating a response.": "",
"Only active when the chat input is in focus.": "",
@@ -1559,6 +1595,7 @@
"PDF document (.pdf)": "Dokument PDF (.pdf)",
"PDF Extract Images (OCR)": "Extrahovat obrázky z PDF (OCR)",
"PDF Loader Mode": "",
"pdf, docx, pptx, xlsx": "",
"pending": "čeká na vyřízení",
"Pending": "Čeká na vyřízení",
"Pending User Overlay Content": "Obsah překryvné vrstvy pro čekajícího uživatele",
@@ -1620,6 +1657,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "Prefix ID se používá k zamezení konfliktů s jinými připojeními přidáním prefixu k ID modelů - pro vypnutí ponechte prázdné",
"Prevent File Creation": "",
"Preview": "Náhled",
"Preview Access": "",
"Previous 30 days": "Posledních 30 dní",
"Previous 7 days": "Posledních 7 dní",
"Previous message": "Předchozí zpráva",
@@ -1697,6 +1735,10 @@
"Remove from favorites": "",
"Remove image": "Odebrat obrázek",
"Remove Model": "Odebrat model",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._few": "",
"Removing {{count}} stale files..._many": "",
"Removing {{count}} stale files..._other": "",
"Rename": "Přejmenovat",
"Renamed to {{name}}": "",
"Render Markdown in Assistant Messages": "",
@@ -1715,6 +1757,7 @@
"Reset": "Resetovat",
"Reset All Models": "Resetovat všechny modely",
"Reset Image": "Resetovat obrázek",
"Reset knowledge base?": "",
"Reset Upload Directory": "Resetovat adresář pro nahrávání",
"Reset Vector Storage/Knowledge": "Resetovat vektorové úložiště/znalosti",
"Reset view": "Resetovat zobrazení",
@@ -1784,6 +1827,7 @@
"Search Prompts": "Hledat instrukce",
"Search Result Count": "Počet výsledků hledání",
"Search Skills": "",
"Search skills...": "",
"Search the internet": "Hledat na internetu",
"Search the web and fetch URLs": "",
"Search Tools": "Hledat nástroje",
@@ -1983,6 +2027,8 @@
"Switch to JSON editor": "",
"Switch to visual editor": "",
"Sync": "",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "",
"Sync directory": "Synchronizovat adresář",
"Sync Failed": "",
@@ -2055,7 +2101,6 @@
"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.": "Tato možnost řídí, kolik tokenů se zachová při obnovování kontextu. Například, pokud je nastavena na 2, poslední 2 tokeny kontextu konverzace budou zachovány. Zachování kontextu může pomoci udržet kontinuitu konverzace, ale může snížit schopnost reagovat na nová témata.",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "Tato možnost povoluje nebo zakazuje použití funkce uvažování v Ollama, která umožňuje modelu přemýšlet před generováním odpovědi. Když je povolena, model si může vzít chvíli na zpracování kontextu konverzace a vygenerovat promyšlenější odpověď.",
"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.": "Tato možnost nastavuje maximální počet tokenů, které může model vygenerovat ve své odpovědi. Zvýšení tohoto limitu umožňuje modelu poskytovat delší odpovědi, ale může také zvýšit pravděpodobnost generování neužitečného nebo irelevantního obsahu.",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Tato volba smaže všechny existující soubory v kolekci a nahradí je nově nahranými soubory.",
"This response was generated by \"{{model}}\"": "Tato odpověď byla vygenerována modelem \"{{model}}\"",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "",
"This will delete": "Tím se smaže",
@@ -2063,7 +2108,7 @@
"This will delete all models including custom models": "Tím se smažou všechny modely včetně vlastních modelů",
"This will delete all models including custom models and cannot be undone.": "Tím se smažou všechny modely včetně vlastních a tuto akci nelze vrátit zpět.",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "Tím se resetuje znalostní báze a synchronizují se všechny soubory. Přejete si pokračovat?",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "Důkladné vysvětlení",
"Thought": "",
"Thought for {{DURATION}}": "Přemýšlel po dobu {{DURATION}}",
@@ -2099,6 +2144,7 @@
"Toggle 1 source": "",
"Toggle details": "",
"Toggle Dictation": "",
"Toggle Mute": "",
"Toggle Sidebar": "",
"Toggle status history": "",
"Toggle whether current connection is active.": "Přepnout, zda je aktuální připojení aktivní.",
@@ -2177,7 +2223,7 @@
"Upload Progress": "Průběh nahrávání",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "Průběh nahrávání: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)",
"Uploaded files or images": "",
"Uploading file...": "",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "",
"URL": "URL",
"URL is required": "URL je vyžadována",
@@ -2197,6 +2243,7 @@
"User Groups": "Skupiny uživatelů",
"User location successfully retrieved.": "Poloha uživatele byla úspěšně získána.",
"User menu": "Uživatelská nabídka",
"User Preview": "",
"User ratings (thumbs up/down)": "",
"User Status": "",
"User Webhooks": "Uživatelské webhooky",
+44 -5
View File
@@ -9,12 +9,17 @@
"[Today at] h:mm A": "[I dag kl.] h:mm A",
"[Yesterday at] h:mm A": "[I går kl.] h:mm A",
"{{ models }}": "{{ modeller }}",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "{{COUNT}} Tilgængelige værktøjer",
"{{COUNT}} characters": "{{COUNT}} tegn",
"{{COUNT}} extracted lines": "{{COUNT}} linjer udtrukket",
"{{COUNT}} files": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "{{COUNT}} skjulte linjer",
"{{COUNT}} members": "",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "{{COUNT}} svar",
"{{COUNT}} Rows": "",
"{{count}} selected_one": "",
@@ -193,6 +198,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "",
"Are you sure you want to delete this channel?": "Er du sikker på du vil slette denne kanal?",
"Are you sure you want to delete this connection? This action cannot be undone.": "",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "",
"Are you sure you want to delete this message?": "Er du sikker på du vil slette denne besked?",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "",
@@ -239,6 +245,7 @@
"Automations": "",
"Available list": "Tilgængelige lister",
"Available models": "",
"Available Skills": "",
"Available Tools": "Tilgængelige værktøj",
"available users": "tilgængelige brugere",
"available!": "tilgængelig!",
@@ -398,13 +405,17 @@
"ComfyUI Workflow": "ComfyUI Workflow",
"ComfyUI Workflow Nodes": "ComfyUI Workflow Nodes",
"Comma separated Node Ids (e.g. 1 or 1,2)": "Kommaseparerede node ID'er (f.eks. 1 eller 1,2)",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "",
"Command": "Kommando",
"Comment": "Kommentar",
"Commit Message": "",
"Community Reviews": "",
"Comparing with knowledge base...": "",
"Completions": "Completions",
"Compress Images in Channels": "Komprimér billeder i kanaler",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "Concurrent requests",
"Config": "",
"Config imported successfully": "Konfiguration importeret",
@@ -537,12 +548,14 @@
"Delete a model": "Slet en model",
"Delete All": "",
"Delete All Chats": "Slet alle chats",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "Slet alt indhold i denne mappe",
"Delete automation?": "",
"Delete calendar": "",
"Delete Calendar": "",
"Delete Chat": "Slet chat",
"Delete chat?": "Slet chat?",
"Delete directory?": "",
"Delete Event": "",
"Delete File": "",
"Delete folder?": "Slet mappe?",
@@ -579,6 +592,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Direkte forbindelser tillader brugere at oprette forbindelse til deres egen OpenAI kompatible API endpoints.",
"Direct Message": "Direkte besked",
"Direct Tool Servers": "Direkte værktøjsservere",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "Valg af mappe annulleret",
"Disable All": "",
"Disable Code Interpreter": "Deaktiver kode interpreter",
@@ -687,6 +705,7 @@
"Embedding Concurrent Requests": "",
"Embedding Model": "Embedding Model",
"Embedding Model Engine": "Embedding Model engine",
"Emoji": "",
"Emojis": "",
"Empty message": "",
"Enable All": "",
@@ -765,6 +784,7 @@
"Enter Kagi Search API Key": "Indtast Kagi Search API nøgle",
"Enter Key Behavior": "Indtast taste opførsel",
"Enter language codes": "Indtast sprogkoder",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "",
"Enter Mistral API Base URL": "Indtast Mistral API base URL",
"Enter Mistral API Key": "Indtast Mistral API nøgle",
@@ -901,6 +921,7 @@
"Failed to archive chat.": "",
"Failed to attach file": "",
"Failed to clear status": "Kunne ikke fjerne status",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "Kunne ikke forbinde til {{URL}} OpenAPI tool server",
"Failed to connect to {{URL}} terminal server": "",
"Failed to copy link": "Kunne ikke kopiere link",
@@ -954,14 +975,16 @@
"File content updated successfully.": "Filens indhold er opdateret.",
"File Context": "",
"File deleted successfully.": "",
"File Extensions": "",
"File Mode": "Filtilstand",
"File moved.": "",
"File name": "",
"File not found.": "Filen blev ikke fundet.",
"File removed successfully.": "Fil fjernet.",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "Filstørrelsen må ikke overstige {{maxSize}} MB.",
"File Upload": "Fil upload",
"File uploaded successfully": "Fil uploadet.",
"File uploaded!": "Fil uploadet!",
"Filename": "",
"Files": "Filer",
"Filter": "Filter",
@@ -1177,13 +1200,13 @@
"Knowledge": "Viden",
"Knowledge Access": "Videnadgang",
"Knowledge Base": "Vidensbase",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "Viden oprettet.",
"Knowledge deleted successfully.": "Viden slettet.",
"Knowledge Description": "Vidensbeskrivelse",
"Knowledge exported successfully": "",
"Knowledge Name": "Vidensnavn",
"Knowledge Public Sharing": "Viden offentlig deling",
"Knowledge reset successfully.": "Viden nulstillet.",
"Knowledge Sharing": "Vidensdeling",
"Knowledge updated successfully": "Viden opdateret.",
"Kokoro.js (Browser)": "Kokoro.js (Browser)",
@@ -1227,6 +1250,7 @@
"Light": "Lys",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "",
"Linkup API Key": "",
"List": "",
"List calendars, search, create, update, and delete calendar events": "",
"Listening...": "Lytter...",
@@ -1377,6 +1401,8 @@
"New calendar": "",
"New Calendar": "",
"New Chat": "Ny chat",
"New directory": "",
"New Directory": "",
"New Event": "",
"New File": "",
"New Folder": "Ny mappe",
@@ -1422,11 +1448,13 @@
"No HTML, CSS, or JavaScript content found.": "Intet HTML-, CSS- eller JavaScript-indhold fundet.",
"No inference engine with management support found": "Ingen inference-engine med støtte til administration fundet",
"No kernel": "",
"No knowledge bases accessible": "",
"No knowledge bases found.": "",
"No knowledge found": "Ingen viden fundet",
"No limit": "",
"No memories to clear": "Ingen hukommelser at ryde",
"No model IDs": "Ingen model-ID'er",
"No models accessible": "",
"No models available": "",
"No models found": "Ingen modeller fundet",
"No models selected": "Ingen modeller valgt",
@@ -1447,6 +1475,7 @@
"No Terminal connection configured.": "",
"No terminal connections configured.": "",
"No tool server connections configured.": "",
"No tools accessible": "",
"No tools found": "Ingen værktøjer fundet",
"No users were found.": "Ingen brugere blev fundet.",
"No valves": "Ingen ventiler",
@@ -1486,6 +1515,7 @@
"On": "Til",
"Once": "",
"OneDrive": "OneDrive",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "Kun aktiv når \"Indsæt store tekster som fil\" indstillingen er slået til.",
"Only active when the chat input is in focus and an LLM is generating a response.": "Kun aktiv når chat-input er fokuseret og en LLM er ved at generere et svar.",
"Only active when the chat input is in focus.": "Kun aktiv når chat-input er fokuseret.",
@@ -1557,6 +1587,7 @@
"PDF document (.pdf)": "PDF-dokument (.pdf)",
"PDF Extract Images (OCR)": "Udtræk billeder fra PDF (OCR)",
"PDF Loader Mode": "",
"pdf, docx, pptx, xlsx": "",
"pending": "afventer",
"Pending": "Afventer",
"Pending User Overlay Content": "Afventende bruger overlay indhold",
@@ -1618,6 +1649,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "Prefix ID bruges til at undgå konflikter med andre forbindelser ved at tilføje et prefix til model-ID'erne - lad være tom for at deaktivere",
"Prevent File Creation": "Forhindr filoprettelse",
"Preview": "Forhåndsvisning",
"Preview Access": "",
"Previous 30 days": "Seneste 30 dage",
"Previous 7 days": "Seneste 7 dage",
"Previous message": "Forrige besked",
@@ -1695,6 +1727,8 @@
"Remove from favorites": "",
"Remove image": "Fjern billede",
"Remove Model": "Fjern model",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._other": "",
"Rename": "Omdøb",
"Renamed to {{name}}": "",
"Render Markdown in Assistant Messages": "",
@@ -1713,6 +1747,7 @@
"Reset": "Nulstil",
"Reset All Models": "Nulstil alle modeller",
"Reset Image": "Nulstil billede",
"Reset knowledge base?": "",
"Reset Upload Directory": "Nulstil uploadmappe",
"Reset Vector Storage/Knowledge": "Nulstil vektor lager/viden",
"Reset view": "Nulstil visning",
@@ -1780,6 +1815,7 @@
"Search Prompts": "Søg i prompts",
"Search Result Count": "Antal søgeresultater",
"Search Skills": "",
"Search skills...": "",
"Search the internet": "Søg internettet",
"Search the web and fetch URLs": "",
"Search Tools": "Søg i værktøjer",
@@ -1977,6 +2013,8 @@
"Switch to JSON editor": "",
"Switch to visual editor": "",
"Sync": "",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "",
"Sync directory": "Synkroniser mappe",
"Sync Failed": "",
@@ -2049,7 +2087,6 @@
"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.": "Denne indstilling styrer hvor mange tokens der bevares ved opdatering af konteksten. For eksempel, hvis sat til 2, vil de sidste 2 tokens af samtale-konteksten blive bevaret. At bevare kontekst kan hjælpe med at opretholde kontinuiteten i en samtale, men det kan reducere evnen til at reagere på nye emner.",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "Denne indstilling aktiverer eller deaktiverer brugen af ræsonnementsfunktionen i Ollama, som tillader modellen at tænke før den genererer et svar. Når aktiveret, kan modellen tage et øjeblik til at behandle samtale-konteksten og generere et mere gennemtænkt svar.",
"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.": "Denne indstilling sætter det maksimale antal tokens modellen kan generere i sit svar. At øge denne grænse tillader modellen at give længere svar, men det kan også øge sandsynligheden for at unyttigt eller irrelevant indhold genereres.",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Denne indstilling sletter alle eksisterende filer i samlingen og erstatter dem med nyligt uploadede filer.",
"This response was generated by \"{{model}}\"": "Dette svar blev genereret af \"{{model}}\"",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "",
"This will delete": "Dette vil slette",
@@ -2057,7 +2094,7 @@
"This will delete all models including custom models": "Dette vil slette alle modeller, inklusive brugerdefinerede modeller",
"This will delete all models including custom models and cannot be undone.": "Dette vil slette alle modeller, inklusive brugerdefinerede modeller og kan ikke fortrydes.",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "Dette vil nulstille vidensbasen og synkronisere alle filer. Vil du fortsætte?",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "Grundig forklaring",
"Thought": "",
"Thought for {{DURATION}}": "Tænkte i {{DURATION}}",
@@ -2093,6 +2130,7 @@
"Toggle 1 source": "",
"Toggle details": "",
"Toggle Dictation": "",
"Toggle Mute": "",
"Toggle Sidebar": "Vis/skjul sidebar",
"Toggle status history": "",
"Toggle whether current connection is active.": "Skift om nuværende forbindelse er aktiv.",
@@ -2171,7 +2209,7 @@
"Upload Progress": "Uploadfremdrift",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "Uploadfremdrift: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)",
"Uploaded files or images": "",
"Uploading file...": "Uploader fil...",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "",
"URL": "URL",
"URL is required": "URL er påkrævet",
@@ -2191,6 +2229,7 @@
"User Groups": "Brugergrupper",
"User location successfully retrieved.": "Brugerplacering hentet.",
"User menu": "Brugermenu",
"User Preview": "",
"User ratings (thumbs up/down)": "",
"User Status": "",
"User Webhooks": "Bruger Webhooks",
+44 -5
View File
@@ -9,12 +9,17 @@
"[Today at] h:mm A": "[Heute um] h:mm A",
"[Yesterday at] h:mm A": "[Gestern um] h:mm A",
"{{ models }}": "{{ models }}",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "{{COUNT}} verfügbare Werkzeuge",
"{{COUNT}} characters": "{{COUNT}} Zeichen",
"{{COUNT}} extracted lines": "{{COUNT}} extrahierte Zeilen",
"{{COUNT}} files": "{{COUNT}} Dateien",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "{{COUNT}} ausgeblendete Zeilen",
"{{COUNT}} members": "{{COUNT}} Mitglieder",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "{{COUNT}} Antworten",
"{{COUNT}} Rows": "{{COUNT}} Reihen",
"{{count}} selected_one": "{{count}} ausgewählt",
@@ -193,6 +198,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "Sind Sie sicher, dass Sie alle Chats löschen wollen? Dieser Vorgang kann nicht rückgängig gemacht werden.",
"Are you sure you want to delete this channel?": "Sind Sie sicher, dass Sie diesen Kanal löschen möchten?",
"Are you sure you want to delete this connection? This action cannot be undone.": "Möchten Sie diese Verbindung wirklich löschen? Dieser Vorgang kann nicht rückgängig gemacht werden.",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "Möchten Sie diese Erinnerung wirklich löschen? Dieser Vorgang kann nicht rückgängig gemacht werden.",
"Are you sure you want to delete this message?": "Sind Sie sicher, dass Sie diese Nachricht löschen möchten?",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "Sind Sie sicher, dass Sie diese Version löschen wollen? Child-Versionen werden zu dem Parent dieser Version verlinkt.",
@@ -239,6 +245,7 @@
"Automations": "Automatisierungen",
"Available list": "Verfügbare Liste",
"Available models": "Verfügbare Modelle",
"Available Skills": "",
"Available Tools": "Verfügbare Werkzeuge",
"available users": "verfügbare Benutzer",
"available!": "Verfügbar!",
@@ -398,13 +405,17 @@
"ComfyUI Workflow": "ComfyUI-Workflow",
"ComfyUI Workflow Nodes": "ComfyUI-Workflow-Nodes",
"Comma separated Node Ids (e.g. 1 or 1,2)": "Kommagetrennte Node-IDs (z. B. 1 oder 1,2)",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "Befehl",
"Command": "Befehl",
"Comment": "Kommentar",
"Commit Message": "Commit Nachricht",
"Community Reviews": "Community Bewertungen",
"Comparing with knowledge base...": "",
"Completions": "Vervollständigungen",
"Compress Images in Channels": "Bilder in Kanälen komprimieren",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "Gleichzeitige Anfragen",
"Config": "Konfiguration",
"Config imported successfully": "Konfiguration erfolgreich importiert",
@@ -537,12 +548,14 @@
"Delete a model": "Ein Modell löschen",
"Delete All": "Alle löschen",
"Delete All Chats": "Alle Chats löschen",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "Alle Inhalte in diesem Ordner löschen",
"Delete automation?": "Automatisierung löschen?",
"Delete calendar": "Kalender löschen",
"Delete Calendar": "Kalender löschen",
"Delete Chat": "Chat löschen",
"Delete chat?": "Chat löschen?",
"Delete directory?": "",
"Delete Event": "Ereignis löschen",
"Delete File": "Datei löschen",
"Delete folder?": "Ordner löschen?",
@@ -579,6 +592,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Direktverbindungen erlauben Benutzern die Verbindung zu eigenen OpenAI-kompatiblen API-Endpunkten.",
"Direct Message": "Direktnachricht",
"Direct Tool Servers": "Direkte Tool-Server",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "Verzeichnisauswahl wurde abgebrochen",
"Disable All": "Alle deaktivieren",
"Disable Code Interpreter": "Code-Interpreter deaktivieren",
@@ -687,6 +705,7 @@
"Embedding Concurrent Requests": "Gleichzeitige Embedding Anfragen",
"Embedding Model": "Embedding-Modell",
"Embedding Model Engine": "Embedding-Modell-Engine",
"Emoji": "",
"Emojis": "Emoji",
"Empty message": "Leere Nachricht",
"Enable All": "Alle aktivieren",
@@ -765,6 +784,7 @@
"Enter Kagi Search API Key": "Kagi Search API-Schlüssel eingeben",
"Enter Key Behavior": "Eingabetasten-Verhalten",
"Enter language codes": "Sprachcodes eingeben",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "MinerU-API-Schlüssel eingeben",
"Enter Mistral API Base URL": "Mistral API Basis-URL eingeben",
"Enter Mistral API Key": "Mistral API-Schlüssel eingeben",
@@ -901,6 +921,7 @@
"Failed to archive chat.": "Chat konnte nicht archiviert werden.",
"Failed to attach file": "Datei konnte nicht hinzugefügt werden",
"Failed to clear status": "Status konnte nicht geleert werden",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "Verbindung zum OpenAPI-Toolserver {{URL}} fehlgeschlagen",
"Failed to connect to {{URL}} terminal server": "Fehler beim Verbinden zum Terminal Server {{URL}}",
"Failed to copy link": "Link konnte nicht kopiert werden",
@@ -954,14 +975,16 @@
"File content updated successfully.": "Dateiinhalt erfolgreich aktualisiert.",
"File Context": "Datei-Kontext",
"File deleted successfully.": "Datei erfolgreich gelöscht.",
"File Extensions": "",
"File Mode": "Datei-Modus",
"File moved.": "",
"File name": "Dateiname",
"File not found.": "Datei nicht gefunden.",
"File removed successfully.": "Datei erfolgreich entfernt.",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "Dateigröße darf {{maxSize}} MB nicht überschreiten.",
"File Upload": "Dateiupload",
"File uploaded successfully": "Datei erfolgreich hochgeladen",
"File uploaded!": "Datei hochgeladen!",
"Filename": "Dateiname",
"Files": "Dateien",
"Filter": "Filter",
@@ -1177,13 +1200,13 @@
"Knowledge": "Wissen",
"Knowledge Access": "Wissenszugriff",
"Knowledge Base": "Wissensspeicher",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "Wissen erfolgreich erstellt.",
"Knowledge deleted successfully.": "Wissen erfolgreich gelöscht.",
"Knowledge Description": "Wissensbeschreibung",
"Knowledge exported successfully": "Wissensspeicher erfolgreich exportiert",
"Knowledge Name": "Wissensname",
"Knowledge Public Sharing": "Öffentliche Freigabe von Wissen",
"Knowledge reset successfully.": "Wissen erfolgreich zurückgesetzt.",
"Knowledge Sharing": "Wissen teilen",
"Knowledge updated successfully": "Wissen erfolgreich aktualisiert",
"Kokoro.js (Browser)": "Kokoro.js (Browser)",
@@ -1227,6 +1250,7 @@
"Light": "Hell",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "Gleichzeitige Suchanfragen begrenzen. 0 = unbegrenzt (Standard). Auf 1 setzen für sequentielle Ausführung (empfohlen für APIs mit strengen Ratenbegrenzungen wie dem kostenlosen Brave-Tarif).",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "Limitiert die Anzahl gleichzeitiger embedding Anfragen. Auf 0 setzen für unlimitiert.",
"Linkup API Key": "",
"List": "Liste",
"List calendars, search, create, update, and delete calendar events": "Kalender auflisten, suchen, erstellen, aktualisieren und löschen",
"Listening...": "Höre zu...",
@@ -1377,6 +1401,8 @@
"New calendar": "Neuer Kalender",
"New Calendar": "Neuer Kalender",
"New Chat": "Neuer Chat",
"New directory": "",
"New Directory": "",
"New Event": "Neues Ereignis",
"New File": "Neue Datei",
"New Folder": "Neuer Ordner",
@@ -1422,11 +1448,13 @@
"No HTML, CSS, or JavaScript content found.": "Keine HTML-, CSS- oder JavaScript-Inhalte gefunden.",
"No inference engine with management support found": "Keine Inferenz-Engine mit Verwaltungsunterstützung gefunden",
"No kernel": "Kein Kernel",
"No knowledge bases accessible": "",
"No knowledge bases found.": "Keine Wissensspeicher gefunden.",
"No knowledge found": "Kein Wissen gefunden",
"No limit": "Kein Limit",
"No memories to clear": "Keine Erinnerungen zum Löschen",
"No model IDs": "Keine Modell-IDs",
"No models accessible": "",
"No models available": "Keine Modelle verfügbar",
"No models found": "Keine Modelle gefunden",
"No models selected": "Keine Modelle ausgewählt",
@@ -1447,6 +1475,7 @@
"No Terminal connection configured.": "Keine Terminal Verbindung konfiguriert.",
"No terminal connections configured.": "Keine Terminal Verbindungen konfiguriert.",
"No tool server connections configured.": "Keine Werkzeug-Server Verbindungen konfiguriert.",
"No tools accessible": "",
"No tools found": "Keine Werkzeuge gefunden",
"No users were found.": "Keine Benutzer gefunden.",
"No valves": "Keine Valves",
@@ -1486,6 +1515,7 @@
"On": "Ein",
"Once": "Einmalig",
"OneDrive": "OneDrive",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "Nur aktiv, wenn die Einstellung „Großen Text als Datei einfügen“ aktiviert ist.",
"Only active when the chat input is in focus and an LLM is generating a response.": "Nur aktiv, wenn das Chat-Eingabefeld fokussiert ist und ein LLM eine Antwort generiert.",
"Only active when the chat input is in focus.": "Nur aktiv, wenn das Chat-Eingabefeld fokussiert ist.",
@@ -1557,6 +1587,7 @@
"PDF document (.pdf)": "PDF-Dokument (.pdf)",
"PDF Extract Images (OCR)": "Bilder aus PDFs extrahieren (OCR)",
"PDF Loader Mode": "PDF Loader Modus",
"pdf, docx, pptx, xlsx": "",
"pending": "ausstehend",
"Pending": "Ausstehend",
"Pending User Overlay Content": "Inhalt des Overlays 'Ausstehende Kontoaktivierung'",
@@ -1618,6 +1649,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "Die Präfix-ID wird verwendet, um Konflikte mit anderen Verbindungen zu vermeiden, indem ein Präfix zu den Modell-IDs hinzugefügt wird - zum Deaktivieren leer lassen.",
"Prevent File Creation": "Dateierstellung verhindern",
"Preview": "Vorschau",
"Preview Access": "",
"Previous 30 days": "Letzte 30 Tage",
"Previous 7 days": "Letzte 7 Tage",
"Previous message": "Vorherige Nachricht",
@@ -1695,6 +1727,8 @@
"Remove from favorites": "Von Favoriten entfernen",
"Remove image": "Bild entfernen",
"Remove Model": "Modell entfernen",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._other": "",
"Rename": "Umbenennen",
"Renamed to {{name}}": "In {{name}} umbenannt",
"Render Markdown in Assistant Messages": "Markdown in Assistentennachrichten rendern",
@@ -1713,6 +1747,7 @@
"Reset": "Zurücksetzen",
"Reset All Models": "Alle Modelle zurücksetzen",
"Reset Image": "Bild zurücksetzen",
"Reset knowledge base?": "",
"Reset Upload Directory": "Upload-Verzeichnis zurücksetzen",
"Reset Vector Storage/Knowledge": "Vektorspeicher/Wissen zurücksetzen",
"Reset view": "Ansicht zurücksetzen",
@@ -1780,6 +1815,7 @@
"Search Prompts": "Prompts durchsuchen...",
"Search Result Count": "Anzahl der Suchergebnisse",
"Search Skills": "Durchsuche Skills",
"Search skills...": "",
"Search the internet": "Das Internet durchsuchen",
"Search the web and fetch URLs": "Durchsuche das Internet und rufe URLs auf",
"Search Tools": "Werkzeuge durchsuchen...",
@@ -1977,6 +2013,8 @@
"Switch to JSON editor": "Zum JSON-Editor wechseln",
"Switch to visual editor": "Zum visuellen Editor wechseln",
"Sync": "Synchronisieren",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "Synchronisierung abgeschlossen!",
"Sync directory": "Ordner synchronisieren",
"Sync Failed": "Synchronisierung fehlgeschlagen",
@@ -2049,7 +2087,6 @@
"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.": "Diese Option steuert, wie viele Token beim Aktualisieren des Kontexts behalten werden. Bei 2 werden z. B. die letzten 2 Token des Gesprächskontexts beibehalten. Dies hilft, die Kontinuität zu wahren, kann aber die Reaktion auf neue Themen einschränken.",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "Diese Option aktiviert die Reasoning-Funktion in Ollama, wodurch das Modell vor der Antwort nachdenken kann. Wenn aktiviert, nimmt sich das Modell einen Moment Zeit, um den Kontext zu verarbeiten und eine durchdachtere Antwort zu generieren.",
"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.": "Diese Option legt die maximale Anzahl von Token fest, die das Modell generieren darf. Ein höheres Limit ermöglicht längere Antworten, kann aber auch die Wahrscheinlichkeit für irrelevante Inhalte erhöhen.",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Diese Option löscht alle vorhandenen Dateien in der Sammlung und ersetzt sie durch die neu hochgeladenen Dateien.",
"This response was generated by \"{{model}}\"": "Diese Antwort wurde von \"{{model}}\" generiert",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "Diese Vorlage enthält mehrere Kontext-Platzhalter ([context] oder {{CONTEXT}}). Der Kontext wird an jeder Stelle eingefügt.",
"This will delete": "Dies löscht",
@@ -2057,7 +2094,7 @@
"This will delete all models including custom models": "Dies löscht alle Modelle, einschließlich benutzerdefinierter Modelle",
"This will delete all models including custom models and cannot be undone.": "Dies löscht alle Modelle, einschließlich benutzerdefinierter Modelle, und kann nicht rückgängig gemacht werden.",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "Dies wird den Kalender \"{{name}}\" und alle seine Ereignisse dauerhaft löschen. Diese Aktion kann nicht rückgängig gemacht werden.",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "Dadurch wird der Wissensspeicher zurückgesetzt und alle Dateien werden synchronisiert. Möchten Sie fortfahren?",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "Ausführliche Erklärung",
"Thought": "Gedanke",
"Thought for {{DURATION}}": "Nachgedacht für {{DURATION}}",
@@ -2093,6 +2130,7 @@
"Toggle 1 source": "Eine Quelle umschalten",
"Toggle details": "Details umschalten",
"Toggle Dictation": "Diktieren umschalten",
"Toggle Mute": "",
"Toggle Sidebar": "Seitenleiste umschalten",
"Toggle status history": "Status Updates umschalten",
"Toggle whether current connection is active.": "Umschalten, ob die aktuelle Verbindung aktiv ist.",
@@ -2171,7 +2209,7 @@
"Upload Progress": "Upload-Fortschritt",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "Fortschritt: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)",
"Uploaded files or images": "Hochgeladene Dateien oder Bilder",
"Uploading file...": "Datei wird hochgeladen...",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "Lade hoch...",
"URL": "URL",
"URL is required": "URL ist erforderlich",
@@ -2191,6 +2229,7 @@
"User Groups": "Benutzergruppen",
"User location successfully retrieved.": "Benutzerstandort erfolgreich abgerufen.",
"User menu": "Benutzermenü",
"User Preview": "",
"User ratings (thumbs up/down)": "Benutzerbewertungen (Daumen hoch/runter)",
"User Status": "Nutzerstatus",
"User Webhooks": "Benutzer-Webhooks",
+44 -5
View File
@@ -9,12 +9,17 @@
"[Today at] h:mm A": "",
"[Yesterday at] h:mm A": "",
"{{ models }}": "",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "",
"{{COUNT}} characters": "",
"{{COUNT}} extracted lines": "",
"{{COUNT}} files": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "",
"{{COUNT}} members": "",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "",
"{{COUNT}} Rows": "",
"{{count}} selected_one": "",
@@ -193,6 +198,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "",
"Are you sure you want to delete this channel?": "",
"Are you sure you want to delete this connection? This action cannot be undone.": "",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "",
"Are you sure you want to delete this message?": "",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "",
@@ -239,6 +245,7 @@
"Automations": "",
"Available list": "",
"Available models": "",
"Available Skills": "",
"Available Tools": "",
"available users": "such available users",
"available!": "available! So excite!",
@@ -398,13 +405,17 @@
"ComfyUI Workflow": "",
"ComfyUI Workflow Nodes": "",
"Comma separated Node Ids (e.g. 1 or 1,2)": "",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "",
"Command": "Command",
"Comment": "",
"Commit Message": "",
"Community Reviews": "",
"Comparing with knowledge base...": "",
"Completions": "",
"Compress Images in Channels": "",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "",
"Config": "",
"Config imported successfully": "",
@@ -537,12 +548,14 @@
"Delete a model": "Delete a model",
"Delete All": "",
"Delete All Chats": "",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "",
"Delete automation?": "",
"Delete calendar": "",
"Delete Calendar": "",
"Delete Chat": "",
"Delete chat?": "",
"Delete directory?": "",
"Delete Event": "",
"Delete File": "",
"Delete folder?": "",
@@ -579,6 +592,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "",
"Direct Message": "",
"Direct Tool Servers": "",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "",
"Disable All": "",
"Disable Code Interpreter": "",
@@ -687,6 +705,7 @@
"Embedding Concurrent Requests": "",
"Embedding Model": "",
"Embedding Model Engine": "",
"Emoji": "",
"Emojis": "",
"Empty message": "",
"Enable All": "",
@@ -765,6 +784,7 @@
"Enter Kagi Search API Key": "",
"Enter Key Behavior": "",
"Enter language codes": "",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "",
"Enter Mistral API Base URL": "",
"Enter Mistral API Key": "",
@@ -901,6 +921,7 @@
"Failed to archive chat.": "",
"Failed to attach file": "",
"Failed to clear status": "",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to connect to {{URL}} terminal server": "",
"Failed to copy link": "",
@@ -954,14 +975,16 @@
"File content updated successfully.": "",
"File Context": "",
"File deleted successfully.": "",
"File Extensions": "",
"File Mode": "Bark Mode",
"File moved.": "",
"File name": "",
"File not found.": "Bark not found.",
"File removed successfully.": "",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "",
"File Upload": "",
"File uploaded successfully": "",
"File uploaded!": "",
"Filename": "",
"Files": "",
"Filter": "",
@@ -1177,13 +1200,13 @@
"Knowledge": "",
"Knowledge Access": "",
"Knowledge Base": "",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "",
"Knowledge deleted successfully.": "",
"Knowledge Description": "",
"Knowledge exported successfully": "",
"Knowledge Name": "",
"Knowledge Public Sharing": "",
"Knowledge reset successfully.": "",
"Knowledge Sharing": "",
"Knowledge updated successfully": "",
"Kokoro.js (Browser)": "",
@@ -1227,6 +1250,7 @@
"Light": "Light",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "",
"Linkup API Key": "",
"List": "",
"List calendars, search, create, update, and delete calendar events": "",
"Listening...": "",
@@ -1377,6 +1401,8 @@
"New calendar": "",
"New Calendar": "",
"New Chat": "New Bark",
"New directory": "",
"New Directory": "",
"New Event": "",
"New File": "",
"New Folder": "",
@@ -1422,11 +1448,13 @@
"No HTML, CSS, or JavaScript content found.": "",
"No inference engine with management support found": "",
"No kernel": "",
"No knowledge bases accessible": "",
"No knowledge bases found.": "",
"No knowledge found": "",
"No limit": "",
"No memories to clear": "",
"No model IDs": "",
"No models accessible": "",
"No models available": "",
"No models found": "",
"No models selected": "",
@@ -1447,6 +1475,7 @@
"No Terminal connection configured.": "",
"No terminal connections configured.": "",
"No tool server connections configured.": "",
"No tools accessible": "",
"No tools found": "",
"No users were found.": "",
"No valves": "",
@@ -1486,6 +1515,7 @@
"On": "On",
"Once": "",
"OneDrive": "",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "",
"Only active when the chat input is in focus and an LLM is generating a response.": "",
"Only active when the chat input is in focus.": "",
@@ -1557,6 +1587,7 @@
"PDF document (.pdf)": "",
"PDF Extract Images (OCR)": "PDF Extract Wowmages (OCR)",
"PDF Loader Mode": "",
"pdf, docx, pptx, xlsx": "",
"pending": "pending",
"Pending": "",
"Pending User Overlay Content": "",
@@ -1618,6 +1649,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "",
"Prevent File Creation": "",
"Preview": "",
"Preview Access": "",
"Previous 30 days": "",
"Previous 7 days": "",
"Previous message": "",
@@ -1695,6 +1727,8 @@
"Remove from favorites": "",
"Remove image": "",
"Remove Model": "",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._other": "",
"Rename": "",
"Renamed to {{name}}": "",
"Render Markdown in Assistant Messages": "",
@@ -1713,6 +1747,7 @@
"Reset": "",
"Reset All Models": "",
"Reset Image": "Reset image. Very wow.",
"Reset knowledge base?": "",
"Reset Upload Directory": "",
"Reset Vector Storage/Knowledge": "",
"Reset view": "",
@@ -1780,6 +1815,7 @@
"Search Prompts": "Search Prompts much wow",
"Search Result Count": "",
"Search Skills": "",
"Search skills...": "",
"Search the internet": "",
"Search the web and fetch URLs": "",
"Search Tools": "",
@@ -1977,6 +2013,8 @@
"Switch to JSON editor": "",
"Switch to visual editor": "",
"Sync": "",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "",
"Sync directory": "",
"Sync Failed": "",
@@ -2049,7 +2087,6 @@
"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.": "",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "",
"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.": "",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
"This response was generated by \"{{model}}\"": "",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "",
"This will delete": "",
@@ -2057,7 +2094,7 @@
"This will delete all models including custom models": "",
"This will delete all models including custom models and cannot be undone.": "",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "",
"Thought": "",
"Thought for {{DURATION}}": "",
@@ -2093,6 +2130,7 @@
"Toggle 1 source": "",
"Toggle details": "",
"Toggle Dictation": "",
"Toggle Mute": "",
"Toggle Sidebar": "",
"Toggle status history": "",
"Toggle whether current connection is active.": "",
@@ -2171,7 +2209,7 @@
"Upload Progress": "Upload Progress much progress",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "",
"Uploaded files or images": "",
"Uploading file...": "",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "",
"URL": "",
"URL is required": "",
@@ -2191,6 +2229,7 @@
"User Groups": "",
"User location successfully retrieved.": "",
"User menu": "",
"User Preview": "",
"User ratings (thumbs up/down)": "",
"User Status": "",
"User Webhooks": "",
+44 -5
View File
@@ -9,12 +9,17 @@
"[Today at] h:mm A": "",
"[Yesterday at] h:mm A": "",
"{{ models }}": "{{ models }}",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "",
"{{COUNT}} characters": "",
"{{COUNT}} extracted lines": "",
"{{COUNT}} files": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "",
"{{COUNT}} members": "",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "",
"{{COUNT}} Rows": "",
"{{count}} selected_one": "",
@@ -193,6 +198,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "",
"Are you sure you want to delete this channel?": "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό το κανάλι;",
"Are you sure you want to delete this connection? This action cannot be undone.": "",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "",
"Are you sure you want to delete this message?": "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτό το μήνυμα;",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "",
@@ -239,6 +245,7 @@
"Automations": "",
"Available list": "Διαθέσιμη λίστα",
"Available models": "",
"Available Skills": "",
"Available Tools": "Διαθέσιμα Εργαλεία",
"available users": "διαθέσιμοι χρήστες",
"available!": "διαθέσιμο!",
@@ -398,13 +405,17 @@
"ComfyUI Workflow": "Ροές Εργασίας ComfyUI",
"ComfyUI Workflow Nodes": "Κόμβοι Ροής Εργασίας ComfyUI",
"Comma separated Node Ids (e.g. 1 or 1,2)": "ID κόμβων διαχωρισμένα με κόμμα (π.χ. 1 ή 1,2)",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "",
"Command": "Εντολή",
"Comment": "Σχόλιο",
"Commit Message": "",
"Community Reviews": "",
"Comparing with knowledge base...": "",
"Completions": "Ολοκληρώσεις",
"Compress Images in Channels": "Συμπίεση εικόνων σε κανάλια",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "Ταυτόχρονες Αιτήσεις",
"Config": "",
"Config imported successfully": "",
@@ -537,12 +548,14 @@
"Delete a model": "Διαγραφή ενός μοντέλου",
"Delete All": "",
"Delete All Chats": "Διαγραφή Όλων των Συνομιλιών",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "",
"Delete automation?": "",
"Delete calendar": "",
"Delete Calendar": "",
"Delete Chat": "Διαγραφή Συνομιλίας",
"Delete chat?": "Διαγραφή συνομιλίας;",
"Delete directory?": "",
"Delete Event": "",
"Delete File": "",
"Delete folder?": "Διαγραφή φακέλου;",
@@ -579,6 +592,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Οι Άμεσες Συνδέσεις επιτρέπουν στους χρήστες να συνδέσουν τα δικά τους API endpoints συμβατά με OpenAI.",
"Direct Message": "",
"Direct Tool Servers": "",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "",
"Disable All": "",
"Disable Code Interpreter": "",
@@ -687,6 +705,7 @@
"Embedding Concurrent Requests": "",
"Embedding Model": "Μοντέλο Ενσωμάτωσης",
"Embedding Model Engine": "Μηχανή Μοντέλου Ενσωμάτωσης",
"Emoji": "",
"Emojis": "",
"Empty message": "",
"Enable All": "",
@@ -765,6 +784,7 @@
"Enter Kagi Search API Key": "",
"Enter Key Behavior": "",
"Enter language codes": "Εισάγετε κωδικούς γλώσσας",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "",
"Enter Mistral API Base URL": "",
"Enter Mistral API Key": "",
@@ -901,6 +921,7 @@
"Failed to archive chat.": "",
"Failed to attach file": "",
"Failed to clear status": "",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "Αποτυχία σύνδεσης στο διακομιστή εργαλείων OpenAPI {{URL}}",
"Failed to connect to {{URL}} terminal server": "",
"Failed to copy link": "Αποτυχία αντιγραφής συνδέσμου",
@@ -954,14 +975,16 @@
"File content updated successfully.": "Το περιεχόμενο του αρχείου ενημερώθηκε με επιτυχία.",
"File Context": "",
"File deleted successfully.": "",
"File Extensions": "",
"File Mode": "Λειτουργία Αρχείου",
"File moved.": "",
"File name": "",
"File not found.": "Αρχείο δεν βρέθηκε.",
"File removed successfully.": "Το αρχείο αφαιρέθηκε με επιτυχία.",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "Το μέγεθος του αρχείου δεν πρέπει να υπερβαίνει τα {{maxSize}} MB.",
"File Upload": "Ανέβασμα Αρχείων",
"File uploaded successfully": "",
"File uploaded!": "",
"Filename": "",
"Files": "Αρχεία",
"Filter": "Φίλτρο",
@@ -1177,13 +1200,13 @@
"Knowledge": "",
"Knowledge Access": "Πρόσβαση στο Knowledge",
"Knowledge Base": "Βάση Knowledge",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "Το Knowledge δημιουργήθηκε με επιτυχία.",
"Knowledge deleted successfully.": "Το Knowledge διαγράφηκε με επιτυχία.",
"Knowledge Description": "Περιγραφή Knowledge",
"Knowledge exported successfully": "",
"Knowledge Name": "Όνομα Knowledge",
"Knowledge Public Sharing": "Κοινή χρήση Knowledge",
"Knowledge reset successfully.": "Το Knowledge επαναφέρθηκε με επιτυχία.",
"Knowledge Sharing": "",
"Knowledge updated successfully": "Το Knowledge ενημερώθηκε με επιτυχία",
"Kokoro.js (Browser)": "",
@@ -1227,6 +1250,7 @@
"Light": "Φως",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "",
"Linkup API Key": "",
"List": "",
"List calendars, search, create, update, and delete calendar events": "",
"Listening...": "Ακούγεται...",
@@ -1377,6 +1401,8 @@
"New calendar": "",
"New Calendar": "",
"New Chat": "Νέα Συνομιλία",
"New directory": "",
"New Directory": "",
"New Event": "",
"New File": "",
"New Folder": "Νέος Φάκελος",
@@ -1422,11 +1448,13 @@
"No HTML, CSS, or JavaScript content found.": "Δεν βρέθηκε περιεχόμενο HTML, CSS ή JavaScript.",
"No inference engine with management support found": "",
"No kernel": "",
"No knowledge bases accessible": "",
"No knowledge bases found.": "",
"No knowledge found": "Δεν βρέθηκε Knowledge",
"No limit": "",
"No memories to clear": "",
"No model IDs": "Δεν υπάρχουν IDs μοντέλων",
"No models accessible": "",
"No models available": "",
"No models found": "Δεν βρέθηκαν μοντέλα",
"No models selected": "Δεν έχουν επιλεγεί μοντέλα",
@@ -1447,6 +1475,7 @@
"No Terminal connection configured.": "",
"No terminal connections configured.": "",
"No tool server connections configured.": "",
"No tools accessible": "",
"No tools found": "Δεν βρέθηκαν εργαλεία",
"No users were found.": "Δεν βρέθηκαν χρήστες.",
"No valves": "",
@@ -1486,6 +1515,7 @@
"On": "Ενεργό",
"Once": "",
"OneDrive": "",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "",
"Only active when the chat input is in focus and an LLM is generating a response.": "",
"Only active when the chat input is in focus.": "",
@@ -1557,6 +1587,7 @@
"PDF document (.pdf)": "Έγγραφο PDF (.pdf)",
"PDF Extract Images (OCR)": "Εξαγωγή Εικόνων PDF (OCR)",
"PDF Loader Mode": "",
"pdf, docx, pptx, xlsx": "",
"pending": "εκκρεμεί",
"Pending": "Εκκρεμεί",
"Pending User Overlay Content": "",
@@ -1618,6 +1649,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "Το ID Προθέματος χρησιμοποιείται για να αποφεύγονται συγκρούσεις με άλλες συνδέσεις προσθέτοντας ένα πρόθεμα στα IDs των μοντέλων - αφήστε κενό για απενεργοποίηση",
"Prevent File Creation": "",
"Preview": "Προεπισκόπηση",
"Preview Access": "",
"Previous 30 days": "Προηγούμενες 30 ημέρες",
"Previous 7 days": "Προηγούμενες 7 ημέρες",
"Previous message": "Προηγούμενο μήνυμα",
@@ -1695,6 +1727,8 @@
"Remove from favorites": "",
"Remove image": "Αφαίρεση εικόνας",
"Remove Model": "Αφαίρεση Μοντέλου",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._other": "",
"Rename": "Μετονομασία",
"Renamed to {{name}}": "",
"Render Markdown in Assistant Messages": "",
@@ -1713,6 +1747,7 @@
"Reset": "Επαναφορά",
"Reset All Models": "Επαναφορά Όλων των Μοντέλων",
"Reset Image": "Επαναφορά εικόνας",
"Reset knowledge base?": "",
"Reset Upload Directory": "Επαναφορά Καταλόγου Ανεβάσματος",
"Reset Vector Storage/Knowledge": "Επαναφορά Αποθήκευσης Διανυσμάτων/Knowledge",
"Reset view": "Επαναφορά προβολής",
@@ -1780,6 +1815,7 @@
"Search Prompts": "Αναζήτηση Προτροπών",
"Search Result Count": "Αριθμός Αποτελεσμάτων Αναζήτησης",
"Search Skills": "",
"Search skills...": "",
"Search the internet": "Αναζήτησε το διαδίκτυο",
"Search the web and fetch URLs": "",
"Search Tools": "Αναζήτηση Εργαλείων",
@@ -1977,6 +2013,8 @@
"Switch to JSON editor": "",
"Switch to visual editor": "",
"Sync": "",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "",
"Sync directory": "Συγχρονισμός καταλόγου",
"Sync Failed": "",
@@ -2049,7 +2087,6 @@
"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.": "",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "",
"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.": "",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Αυτή η επιλογή θα διαγράψει όλα τα υπάρχοντα αρχεία στη συλλογή και θα τα αντικαταστήσει με νέα ανεβασμένα αρχεία.",
"This response was generated by \"{{model}}\"": "Αυτή η απάντηση δημιουργήθηκε από \"{{model}}\"",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "",
"This will delete": "Αυτό θα διαγράψει",
@@ -2057,7 +2094,7 @@
"This will delete all models including custom models": "Αυτό θα διαγράψει όλα τα μοντέλα, συμπεριλαμβανομένων των προσαρμοσμένων μοντέλων",
"This will delete all models including custom models and cannot be undone.": "Αυτό θα διαγράψει όλα τα μοντέλα, συμπεριλαμβανομένων των προσαρμοσμένων μοντέλων και δεν μπορεί να αναιρεθεί.",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "Αυτό θα επαναφέρει τη βάση γνώσης και θα συγχρονίσει όλα τα αρχεία. Θέλετε να συνεχίσετε;",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "Λεπτομερής εξήγηση",
"Thought": "",
"Thought for {{DURATION}}": "Σκέφτηκε για {{DURATION}}",
@@ -2093,6 +2130,7 @@
"Toggle 1 source": "",
"Toggle details": "",
"Toggle Dictation": "",
"Toggle Mute": "",
"Toggle Sidebar": "",
"Toggle status history": "",
"Toggle whether current connection is active.": "",
@@ -2171,7 +2209,7 @@
"Upload Progress": "Πρόοδος Ανεβάσματος",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "",
"Uploaded files or images": "",
"Uploading file...": "",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "",
"URL": "URL",
"URL is required": "Το URL είναι απαραίτητο",
@@ -2191,6 +2229,7 @@
"User Groups": "Ομάδες Χρηστών",
"User location successfully retrieved.": "Η τοποθεσία του χρήστη ανακτήθηκε με επιτυχία.",
"User menu": "Μενού Χρήστη",
"User Preview": "",
"User ratings (thumbs up/down)": "",
"User Status": "",
"User Webhooks": "Webhooks Χρήστη",
+44 -5
View File
@@ -9,12 +9,17 @@
"[Today at] h:mm A": "",
"[Yesterday at] h:mm A": "",
"{{ models }}": "",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "",
"{{COUNT}} characters": "",
"{{COUNT}} extracted lines": "",
"{{COUNT}} files": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "",
"{{COUNT}} members": "",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "",
"{{COUNT}} Rows": "",
"{{count}} selected_one": "",
@@ -193,6 +198,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "",
"Are you sure you want to delete this channel?": "",
"Are you sure you want to delete this connection? This action cannot be undone.": "",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "",
"Are you sure you want to delete this message?": "",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "",
@@ -239,6 +245,7 @@
"Automations": "",
"Available list": "",
"Available models": "",
"Available Skills": "",
"Available Tools": "",
"available users": "",
"available!": "",
@@ -398,13 +405,17 @@
"ComfyUI Workflow": "",
"ComfyUI Workflow Nodes": "",
"Comma separated Node Ids (e.g. 1 or 1,2)": "",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "",
"Command": "",
"Comment": "",
"Commit Message": "",
"Community Reviews": "",
"Comparing with knowledge base...": "",
"Completions": "",
"Compress Images in Channels": "",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "",
"Config": "",
"Config imported successfully": "",
@@ -537,12 +548,14 @@
"Delete a model": "",
"Delete All": "",
"Delete All Chats": "",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "",
"Delete automation?": "",
"Delete calendar": "",
"Delete Calendar": "",
"Delete Chat": "",
"Delete chat?": "",
"Delete directory?": "",
"Delete Event": "",
"Delete File": "",
"Delete folder?": "",
@@ -579,6 +592,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "",
"Direct Message": "",
"Direct Tool Servers": "",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "",
"Disable All": "",
"Disable Code Interpreter": "",
@@ -687,6 +705,7 @@
"Embedding Concurrent Requests": "",
"Embedding Model": "",
"Embedding Model Engine": "",
"Emoji": "",
"Emojis": "",
"Empty message": "",
"Enable All": "",
@@ -765,6 +784,7 @@
"Enter Kagi Search API Key": "",
"Enter Key Behavior": "Enter Key Behaviour",
"Enter language codes": "",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "",
"Enter Mistral API Base URL": "",
"Enter Mistral API Key": "",
@@ -901,6 +921,7 @@
"Failed to archive chat.": "",
"Failed to attach file": "",
"Failed to clear status": "",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to connect to {{URL}} terminal server": "",
"Failed to copy link": "",
@@ -954,14 +975,16 @@
"File content updated successfully.": "",
"File Context": "",
"File deleted successfully.": "",
"File Extensions": "",
"File Mode": "",
"File moved.": "",
"File name": "",
"File not found.": "",
"File removed successfully.": "",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "",
"File Upload": "",
"File uploaded successfully": "",
"File uploaded!": "",
"Filename": "",
"Files": "",
"Filter": "",
@@ -1177,13 +1200,13 @@
"Knowledge": "",
"Knowledge Access": "",
"Knowledge Base": "",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "",
"Knowledge deleted successfully.": "",
"Knowledge Description": "",
"Knowledge exported successfully": "",
"Knowledge Name": "",
"Knowledge Public Sharing": "",
"Knowledge reset successfully.": "",
"Knowledge Sharing": "",
"Knowledge updated successfully": "",
"Kokoro.js (Browser)": "",
@@ -1227,6 +1250,7 @@
"Light": "",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "",
"Linkup API Key": "",
"List": "",
"List calendars, search, create, update, and delete calendar events": "",
"Listening...": "",
@@ -1377,6 +1401,8 @@
"New calendar": "",
"New Calendar": "",
"New Chat": "",
"New directory": "",
"New Directory": "",
"New Event": "",
"New File": "",
"New Folder": "",
@@ -1422,11 +1448,13 @@
"No HTML, CSS, or JavaScript content found.": "",
"No inference engine with management support found": "",
"No kernel": "",
"No knowledge bases accessible": "",
"No knowledge bases found.": "",
"No knowledge found": "",
"No limit": "",
"No memories to clear": "",
"No model IDs": "",
"No models accessible": "",
"No models available": "",
"No models found": "",
"No models selected": "",
@@ -1447,6 +1475,7 @@
"No Terminal connection configured.": "",
"No terminal connections configured.": "",
"No tool server connections configured.": "",
"No tools accessible": "",
"No tools found": "",
"No users were found.": "",
"No valves": "",
@@ -1486,6 +1515,7 @@
"On": "",
"Once": "",
"OneDrive": "",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "",
"Only active when the chat input is in focus and an LLM is generating a response.": "",
"Only active when the chat input is in focus.": "",
@@ -1557,6 +1587,7 @@
"PDF document (.pdf)": "",
"PDF Extract Images (OCR)": "",
"PDF Loader Mode": "",
"pdf, docx, pptx, xlsx": "",
"pending": "",
"Pending": "",
"Pending User Overlay Content": "",
@@ -1618,6 +1649,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "",
"Prevent File Creation": "",
"Preview": "",
"Preview Access": "",
"Previous 30 days": "",
"Previous 7 days": "",
"Previous message": "",
@@ -1695,6 +1727,8 @@
"Remove from favorites": "",
"Remove image": "",
"Remove Model": "",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._other": "",
"Rename": "",
"Renamed to {{name}}": "",
"Render Markdown in Assistant Messages": "",
@@ -1713,6 +1747,7 @@
"Reset": "",
"Reset All Models": "",
"Reset Image": "",
"Reset knowledge base?": "",
"Reset Upload Directory": "",
"Reset Vector Storage/Knowledge": "",
"Reset view": "",
@@ -1780,6 +1815,7 @@
"Search Prompts": "",
"Search Result Count": "",
"Search Skills": "",
"Search skills...": "",
"Search the internet": "",
"Search the web and fetch URLs": "",
"Search Tools": "",
@@ -1977,6 +2013,8 @@
"Switch to JSON editor": "",
"Switch to visual editor": "",
"Sync": "",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "",
"Sync directory": "",
"Sync Failed": "",
@@ -2049,7 +2087,6 @@
"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.": "",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "",
"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.": "",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
"This response was generated by \"{{model}}\"": "",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "",
"This will delete": "",
@@ -2057,7 +2094,7 @@
"This will delete all models including custom models": "",
"This will delete all models including custom models and cannot be undone.": "",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "",
"Thought": "",
"Thought for {{DURATION}}": "",
@@ -2093,6 +2130,7 @@
"Toggle 1 source": "",
"Toggle details": "",
"Toggle Dictation": "",
"Toggle Mute": "",
"Toggle Sidebar": "",
"Toggle status history": "",
"Toggle whether current connection is active.": "",
@@ -2171,7 +2209,7 @@
"Upload Progress": "",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "",
"Uploaded files or images": "",
"Uploading file...": "",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "",
"URL": "",
"URL is required": "",
@@ -2191,6 +2229,7 @@
"User Groups": "",
"User location successfully retrieved.": "",
"User menu": "",
"User Preview": "",
"User ratings (thumbs up/down)": "",
"User Status": "",
"User Webhooks": "",
+44 -7
View File
@@ -9,13 +9,17 @@
"[Today at] h:mm A": "",
"[Yesterday at] h:mm A": "",
"{{ models }}": "",
"{{COUNT}} Available Tools": "",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "",
"{{COUNT}} characters": "",
"{{COUNT}} extracted lines": "",
"{{COUNT}} files": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "",
"{{COUNT}} members": "",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "",
"{{COUNT}} Rows": "",
"{{count}} selected_one": "",
@@ -194,6 +198,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "",
"Are you sure you want to delete this channel?": "",
"Are you sure you want to delete this connection? This action cannot be undone.": "",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "",
"Are you sure you want to delete this message?": "",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "",
@@ -240,8 +245,8 @@
"Automations": "",
"Available list": "",
"Available models": "",
"Available Tools": "",
"Available Skills": "",
"Available Tools": "",
"available users": "",
"available!": "",
"Away": "",
@@ -400,13 +405,17 @@
"ComfyUI Workflow": "",
"ComfyUI Workflow Nodes": "",
"Comma separated Node Ids (e.g. 1 or 1,2)": "",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "",
"Command": "",
"Comment": "",
"Commit Message": "",
"Community Reviews": "",
"Comparing with knowledge base...": "",
"Completions": "",
"Compress Images in Channels": "",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "",
"Config": "",
"Config imported successfully": "",
@@ -539,12 +548,14 @@
"Delete a model": "",
"Delete All": "",
"Delete All Chats": "",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "",
"Delete automation?": "",
"Delete calendar": "",
"Delete Calendar": "",
"Delete Chat": "",
"Delete chat?": "",
"Delete directory?": "",
"Delete Event": "",
"Delete File": "",
"Delete folder?": "",
@@ -581,6 +592,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "",
"Direct Message": "",
"Direct Tool Servers": "",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "",
"Disable All": "",
"Disable Code Interpreter": "",
@@ -689,6 +705,7 @@
"Embedding Concurrent Requests": "",
"Embedding Model": "",
"Embedding Model Engine": "",
"Emoji": "",
"Emojis": "",
"Empty message": "",
"Enable All": "",
@@ -767,6 +784,7 @@
"Enter Kagi Search API Key": "",
"Enter Key Behavior": "",
"Enter language codes": "",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "",
"Enter Mistral API Base URL": "",
"Enter Mistral API Key": "",
@@ -903,6 +921,7 @@
"Failed to archive chat.": "",
"Failed to attach file": "",
"Failed to clear status": "",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to connect to {{URL}} terminal server": "",
"Failed to copy link": "",
@@ -956,14 +975,16 @@
"File content updated successfully.": "",
"File Context": "",
"File deleted successfully.": "",
"File Extensions": "",
"File Mode": "",
"File moved.": "",
"File name": "",
"File not found.": "",
"File removed successfully.": "",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "",
"File Upload": "",
"File uploaded successfully": "",
"File uploaded!": "",
"Filename": "",
"Files": "",
"Filter": "",
@@ -1179,13 +1200,13 @@
"Knowledge": "",
"Knowledge Access": "",
"Knowledge Base": "",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "",
"Knowledge deleted successfully.": "",
"Knowledge Description": "",
"Knowledge exported successfully": "",
"Knowledge Name": "",
"Knowledge Public Sharing": "",
"Knowledge reset successfully.": "",
"Knowledge Sharing": "",
"Knowledge updated successfully": "",
"Kokoro.js (Browser)": "",
@@ -1229,6 +1250,7 @@
"Light": "",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "",
"Linkup API Key": "",
"List": "",
"List calendars, search, create, update, and delete calendar events": "",
"Listening...": "",
@@ -1379,6 +1401,8 @@
"New calendar": "",
"New Calendar": "",
"New Chat": "",
"New directory": "",
"New Directory": "",
"New Event": "",
"New File": "",
"New Folder": "",
@@ -1424,11 +1448,13 @@
"No HTML, CSS, or JavaScript content found.": "",
"No inference engine with management support found": "",
"No kernel": "",
"No knowledge bases accessible": "",
"No knowledge bases found.": "",
"No knowledge found": "",
"No limit": "",
"No memories to clear": "",
"No model IDs": "",
"No models accessible": "",
"No models available": "",
"No models found": "",
"No models selected": "",
@@ -1449,6 +1475,7 @@
"No Terminal connection configured.": "",
"No terminal connections configured.": "",
"No tool server connections configured.": "",
"No tools accessible": "",
"No tools found": "",
"No users were found.": "",
"No valves": "",
@@ -1488,6 +1515,7 @@
"On": "",
"Once": "",
"OneDrive": "",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "",
"Only active when the chat input is in focus and an LLM is generating a response.": "",
"Only active when the chat input is in focus.": "",
@@ -1559,6 +1587,7 @@
"PDF document (.pdf)": "",
"PDF Extract Images (OCR)": "",
"PDF Loader Mode": "",
"pdf, docx, pptx, xlsx": "",
"pending": "",
"Pending": "",
"Pending User Overlay Content": "",
@@ -1620,6 +1649,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "",
"Prevent File Creation": "",
"Preview": "",
"Preview Access": "",
"Previous 30 days": "",
"Previous 7 days": "",
"Previous message": "Previous message",
@@ -1697,6 +1727,8 @@
"Remove from favorites": "",
"Remove image": "",
"Remove Model": "",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._other": "",
"Rename": "",
"Renamed to {{name}}": "",
"Render Markdown in Assistant Messages": "",
@@ -1715,6 +1747,7 @@
"Reset": "",
"Reset All Models": "",
"Reset Image": "",
"Reset knowledge base?": "",
"Reset Upload Directory": "",
"Reset Vector Storage/Knowledge": "",
"Reset view": "",
@@ -1782,6 +1815,7 @@
"Search Prompts": "",
"Search Result Count": "",
"Search Skills": "",
"Search skills...": "",
"Search the internet": "",
"Search the web and fetch URLs": "",
"Search Tools": "",
@@ -1979,6 +2013,8 @@
"Switch to JSON editor": "",
"Switch to visual editor": "",
"Sync": "",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "",
"Sync directory": "",
"Sync Failed": "",
@@ -2051,7 +2087,6 @@
"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.": "",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "",
"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.": "",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
"This response was generated by \"{{model}}\"": "",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "",
"This will delete": "",
@@ -2059,7 +2094,7 @@
"This will delete all models including custom models": "",
"This will delete all models including custom models and cannot be undone.": "",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "",
"Thought": "",
"Thought for {{DURATION}}": "",
@@ -2095,6 +2130,7 @@
"Toggle 1 source": "",
"Toggle details": "",
"Toggle Dictation": "",
"Toggle Mute": "",
"Toggle Sidebar": "",
"Toggle status history": "",
"Toggle whether current connection is active.": "",
@@ -2173,7 +2209,7 @@
"Upload Progress": "",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "",
"Uploaded files or images": "",
"Uploading file...": "",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "",
"URL": "",
"URL is required": "",
@@ -2193,6 +2229,7 @@
"User Groups": "",
"User location successfully retrieved.": "",
"User menu": "",
"User Preview": "",
"User ratings (thumbs up/down)": "",
"User Status": "",
"User Webhooks": "",
+48 -5
View File
@@ -9,12 +9,19 @@
"[Today at] h:mm A": "[Hoy a las] h:mm A",
"[Yesterday at] h:mm A": "[Ayer a las] h:mm A",
"{{ models }}": "{{ models }}",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "{{COUNT}} herramientas disponibles",
"{{COUNT}} characters": "{{COUNT}} caracteres",
"{{COUNT}} extracted lines": "{{COUNT}} líneas extraidas",
"{{COUNT}} files": "{{COUNT}} archivos",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_many": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "{{COUNT}} líneas ocultas",
"{{COUNT}} members": "{{COUNT}} miembros",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_many": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "{{COUNT}} Respuestas",
"{{COUNT}} Rows": "{{COUNT}} filas",
"{{count}} selected_one": "{{count}} únicos seleccionados",
@@ -194,6 +201,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "¿Estás seguro que quieres borrar todos los chats? (¡esta acción NO se puede deshacer!)",
"Are you sure you want to delete this channel?": "¿Estás seguro de que quieres eliminar este canal?",
"Are you sure you want to delete this connection? This action cannot be undone.": "¿Estás seguro que desea eliminar esta conexión? (¡esta acción NO se puede deshacer!)",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "¿Estás seguro que desea eliminar esta memoria? (¡esta acción NO se puede deshacer!)",
"Are you sure you want to delete this message?": "¿Estás seguro de que quieres eliminar este mensaje? ",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "¿Estás seguro que desea eliminar esta versión? (las versiones derivadas se vincularán a la versión principal de esta)",
@@ -240,6 +248,7 @@
"Automations": "Automatizaciones",
"Available list": "Lista disponible",
"Available models": "Modelos disponibles",
"Available Skills": "",
"Available Tools": "Herramientas Disponibles",
"available users": "usuarios disponibles",
"available!": "¡disponible!",
@@ -399,13 +408,18 @@
"ComfyUI Workflow": "Flujo de Trabajo de ComfyUI",
"ComfyUI Workflow Nodes": "Nodos del Flujo de Trabajo de ComfyUI",
"Comma separated Node Ids (e.g. 1 or 1,2)": "IDs de Nodo separados por comas (ej. 1 o 1,2)",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "comando",
"Command": "Comando",
"Comment": "Comentario",
"Commit Message": "Corregir Mensaje",
"Community Reviews": "Revisiones de la Comunidad",
"Comparing with knowledge base...": "",
"Completions": "Cumplimientos",
"Compress Images in Channels": "Comprimir Imágenes en Canales",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_many": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "Número de Solicitudes Concurrentes",
"Config": "Config",
"Config imported successfully": "Configuración importada correctamente",
@@ -538,12 +552,14 @@
"Delete a model": "Borrar un modelo",
"Delete All": "Borrar Todo",
"Delete All Chats": "Borrar todos los chats",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "Borrar todo el contenido de esta carpeta",
"Delete automation?": "¿Borrar automatización?",
"Delete calendar": "Borrar calendario",
"Delete Calendar": "Borrar Calendario",
"Delete Chat": "Borrar Chat",
"Delete chat?": "¿Borrar el chat?",
"Delete directory?": "",
"Delete Event": "Borrar Evento",
"Delete File": "Borrar Fichero",
"Delete folder?": "¿Borrar carpeta?",
@@ -580,6 +596,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Las Conexiones Directas permiten a los usuarios conectar a sus propios endpoints compatibles API OpenAI.",
"Direct Message": "Mensaje Directo",
"Direct Tool Servers": "Servidores de Herramientas Directos",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "La selección de directorio ha sido cancelada",
"Disable All": "Deshabilitar Todo",
"Disable Code Interpreter": "Deshabilitar Interprete de Código",
@@ -688,6 +709,7 @@
"Embedding Concurrent Requests": "Número de Peticiones Concurrentes en Incrustración",
"Embedding Model": "Modelo de Incrustación",
"Embedding Model Engine": "Motor del Modelo de Incrustación",
"Emoji": "",
"Emojis": "Emoticonos",
"Empty message": "Mensaje vacío",
"Enable All": "Habilitar Todo",
@@ -766,6 +788,7 @@
"Enter Kagi Search API Key": "Ingresar Clave API de Kagi Search",
"Enter Key Behavior": "Comportamiento de la Tecla de Envío",
"Enter language codes": "Ingresar Códigos de Idioma",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "Ingresar Clave API de MinerU",
"Enter Mistral API Base URL": "Ingresar la URL Base de la API de Mistral",
"Enter Mistral API Key": "Ingresar Clave API de Mistral",
@@ -902,6 +925,7 @@
"Failed to archive chat.": "Fallo al archivar el chat",
"Failed to attach file": "Fallo al adjuntar el archivo",
"Failed to clear status": "Fallo al limpiar el estado",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "Fallo al conectar al servidor de herramientas: {{URL}}",
"Failed to connect to {{URL}} terminal server": "Fallo al conectar al servidor de terminal: {{URL}}",
"Failed to copy link": "Fallo al copiar enlace",
@@ -955,14 +979,16 @@
"File content updated successfully.": "Contenido del archivo actualizado correctamente.",
"File Context": "Contexto del Archivo",
"File deleted successfully.": "Archivo borrado correctamente.",
"File Extensions": "",
"File Mode": "Modo de Archivo",
"File moved.": "",
"File name": "Nombre del archivo",
"File not found.": "Archivo no encontrado.",
"File removed successfully.": "Archivo eliminado correctamente.",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "Tamaño del archivo no debe exceder {{maxSize}} MB.",
"File Upload": "Subir Archivo",
"File uploaded successfully": "Archivo subido correctamente",
"File uploaded!": "¡Archivo subido!",
"Filename": "Nombre del Archivo",
"Files": "Archivos",
"Filter": "Filtro",
@@ -1178,13 +1204,13 @@
"Knowledge": "Conocimiento",
"Knowledge Access": "Permiso a Conocimiento",
"Knowledge Base": "Base de Conocimiento",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "Conocimiento creado correctamente.",
"Knowledge deleted successfully.": "Conocimiento eliminado correctamente.",
"Knowledge Description": "Descripción del Conocimiento",
"Knowledge exported successfully": "Conocimiento exportado correctamente",
"Knowledge Name": "Nombre del Conocimiento",
"Knowledge Public Sharing": "Compartir Conocimiento Públicamente",
"Knowledge reset successfully.": "Conocimiento restablecido correctamente.",
"Knowledge Sharing": "Compartir Conocimiento",
"Knowledge updated successfully": "Conocimiento actualizado correctamente.",
"Kokoro.js (Browser)": "Kokoro.js (Navegador)",
@@ -1228,6 +1254,7 @@
"Light": "Claro",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "Limitar consultas de búsqueda simultáneas. 0 = ilimitado (predeterminado). Establécerlo en 1 para ejecución secuencial (recomendado para API con límites de velocidad estrictos, como la versión gratuita de Brave).",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "Limita el número de peticiones concurrentes al incrustrar. Ajusta a 0 para ilimitadas",
"Linkup API Key": "",
"List": "Lista",
"List calendars, search, create, update, and delete calendar events": "Listar, buscar, crear, actualizar y borrar eventos en calendarios",
"Listening...": "Escuchando...",
@@ -1378,6 +1405,8 @@
"New calendar": "Nuevo calendario",
"New Calendar": "Nuevo Calendario",
"New Chat": "Nuevo Chat",
"New directory": "",
"New Directory": "",
"New Event": "Nuevo Evento",
"New File": "Nuevo Archivo",
"New Folder": "Nueva Carpeta",
@@ -1423,11 +1452,13 @@
"No HTML, CSS, or JavaScript content found.": "No se encontró contenido HTML, CSS, o JavaScript.",
"No inference engine with management support found": "No se encontró un motor de inferencia que soporte gestión",
"No kernel": "Sin núcleo Jupyter",
"No knowledge bases accessible": "",
"No knowledge bases found.": "No se encontraron bases de conocimiento",
"No knowledge found": "No se encontró ningún conocimiento",
"No limit": "Sin límite",
"No memories to clear": "No hay memorias para borrar",
"No model IDs": "No hay IDs de modelo",
"No models accessible": "",
"No models available": "No hay modelos disponibles",
"No models found": "No se encontraron modelos",
"No models selected": "No se seleccionaron modelos",
@@ -1448,6 +1479,7 @@
"No Terminal connection configured.": "Ninguna conexión configurada a Terminal",
"No terminal connections configured.": "No hay conexiones a terminal configuradas.",
"No tool server connections configured.": "No hay conexiones a servidores de herramientas configuradas",
"No tools accessible": "",
"No tools found": "No se encontraron herramientas",
"No users were found.": "No se encontraron usuarios.",
"No valves": "No hay válvulas",
@@ -1487,6 +1519,7 @@
"On": "Activado",
"Once": "Una vez",
"OneDrive": "OneDrive",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "Solo activo cuando \"Pegar el Texto Largo como Archivo\" está activado",
"Only active when the chat input is in focus and an LLM is generating a response.": "Solo activo con el foco en la entrada del chat y se está generando una respuesta",
"Only active when the chat input is in focus.": "Solo activo con el foco en la entrada del chat",
@@ -1558,6 +1591,7 @@
"PDF document (.pdf)": "Documento PDF (.pdf)",
"PDF Extract Images (OCR)": "Extraer imágenes del PDF (OCR)",
"PDF Loader Mode": "Modo de Carga del PDF",
"pdf, docx, pptx, xlsx": "",
"pending": "pendiente",
"Pending": "Pendiente",
"Pending User Overlay Content": "Contenido de la SobreCapa Usuario Pendiente",
@@ -1619,6 +1653,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "El prefijo ID se utiliza para evitar conflictos con otras conexiones al añadir un prefijo a los IDs de modelo, dejar vacío para deshabilitarlo",
"Prevent File Creation": "Prevenir la Creación de Archivos",
"Preview": "Previsualización",
"Preview Access": "",
"Previous 30 days": "30 días previos",
"Previous 7 days": "7 días previos",
"Previous message": "Mensaje anterior",
@@ -1696,6 +1731,9 @@
"Remove from favorites": "Eliminar de favoritos",
"Remove image": "Eliminar imagen",
"Remove Model": "Eliminar Modelo",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._many": "",
"Removing {{count}} stale files..._other": "",
"Rename": "Renombrar",
"Renamed to {{name}}": "Renombrado como {{name}}",
"Render Markdown in Assistant Messages": "Renderizar Marldown en los Mensajes del Asistente",
@@ -1714,6 +1752,7 @@
"Reset": "Reiniciar",
"Reset All Models": "Reiniciar Todos los Modelos",
"Reset Image": "Restablecer imagen",
"Reset knowledge base?": "",
"Reset Upload Directory": "Reiniciar Directorio de Subidas",
"Reset Vector Storage/Knowledge": "Reiniciar Almacenamiento de Vectores/Conocimiento",
"Reset view": "Reiniciar Vista",
@@ -1782,6 +1821,7 @@
"Search Prompts": "Buscar Indicadores",
"Search Result Count": "Número de resultados de la búsqueda",
"Search Skills": "Buscar Habilidades",
"Search skills...": "",
"Search the internet": "Buscar en internet",
"Search the web and fetch URLs": "Buscar en la web y obtener URLs",
"Search Tools": "Buscar Herramientas",
@@ -1980,6 +2020,8 @@
"Switch to JSON editor": "Cambiar a editor JSON",
"Switch to visual editor": "Cambiar a editor visual",
"Sync": "Sincronizar",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "Sincronización Completa",
"Sync directory": "Sincroniza Directorio",
"Sync Failed": "Fallo al Sincronizar",
@@ -2052,7 +2094,6 @@
"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.": "Esta opción controla cuántos tokens se conservan cuando se actualiza el contexto. Por ejemplo, si se establece en 2, se conservarán los primeros 2 tokens del contexto de la conversación. Conservar el contexto puede ayudar a mantener la continuidad de una conversación, pero puede reducir la habilidad para responder a nuevos temas.",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "Esta opción activa o desactiva el uso de la característica de razonamiento en Ollama, la cuál permite al modelo pensar antes de generar una respuesta. Cuando está activa el modelo se toma un tiempo para procesar el contexto de la conversación y generar una respuesta más razonada.",
"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.": "Esta opción establece el número máximo de tokens que el modelo puede generar en sus respuestas. Aumentar este límite permite al modelo proporcionar respuestas más largas, pero también puede aumentar la probabilidad de que se genere contenido inútil o irrelevante.",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Esta opción eliminará todos los archivos existentes en la colección y los reemplazará con los nuevos archivos subidos.",
"This response was generated by \"{{model}}\"": "Esta respuesta fue generada por \"{{model}}\"",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "¡AVISO! Esta plantilla contiene multiples variables de remplazo ([context] o {{context}}. El contexto será inyectado en cada una de ellas.",
"This will delete": "Esto eliminará",
@@ -2060,7 +2101,7 @@
"This will delete all models including custom models": "Esto eliminará todos los modelos, incluidos los modelos personalizados",
"This will delete all models including custom models and cannot be undone.": "Esto eliminará todos los modelos, incluidos los modelos personalizados y no se puede deshacer.",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "Esta acción borará permanentemente el calendario \"{{name}}\" y todos sus eventos. Esta acción no se puede deshacer.",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "Esto reinicializará la base de conocimientos y sincronizará todos los archivos. ¿Desea continuar?",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "Explicación exhaustiva",
"Thought": "Pensando",
"Thought for {{DURATION}}": "Pensando durante {{DURATION}}",
@@ -2096,6 +2137,7 @@
"Toggle 1 source": "Des/Plegar 1 fuente",
"Toggle details": "Des/Plegar detalles",
"Toggle Dictation": "Des/Plegar Dictado",
"Toggle Mute": "",
"Toggle Sidebar": "Des/Plegar la Barra Lateral",
"Toggle status history": "Des/Plegar historial de estado",
"Toggle whether current connection is active.": "Alternar si la conexión actual está activa",
@@ -2174,7 +2216,7 @@
"Upload Progress": "Progreso de la Subida",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "Progreso de la Subida: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)",
"Uploaded files or images": "Archivos o imágenes cargados",
"Uploading file...": "Subiendo archivo...",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "Subiendo...",
"URL": "URL",
"URL is required": "La URL es requerida",
@@ -2194,6 +2236,7 @@
"User Groups": "Grupos de Usuarios",
"User location successfully retrieved.": "Ubicación de usuario obtenida correctamente.",
"User menu": "Menu de Usuario",
"User Preview": "",
"User ratings (thumbs up/down)": "Calificaciones de los usuarios (pulgares arriba/abajo)",
"User Status": "Estado del Usuario",
"User Webhooks": "Usuario Webhooks",
+44 -5
View File
@@ -9,12 +9,17 @@
"[Today at] h:mm A": "[Täna kell] h:mm A",
"[Yesterday at] h:mm A": "[Eile kell] h:mm A",
"{{ models }}": "{{ mudelid }}",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "{{COUNT}} tööriista saadaval",
"{{COUNT}} characters": "{{COUNT}} märki",
"{{COUNT}} extracted lines": "{{COUNT}} eraldatud rida",
"{{COUNT}} files": "{{COUNT}} faili",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "{{COUNT}} peidetud rida",
"{{COUNT}} members": "{{COUNT}} liiget",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "{{COUNT}} vastust",
"{{COUNT}} Rows": "{{COUNT}} rida",
"{{count}} selected_one": "",
@@ -193,6 +198,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "Kas olete kindel, et soovite kustutada kõik vestlused? Seda toimingut ei saa tagasi võtta.",
"Are you sure you want to delete this channel?": "Kas olete kindel, et soovite selle kanali kustutada?",
"Are you sure you want to delete this connection? This action cannot be undone.": "",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "",
"Are you sure you want to delete this message?": "Kas olete kindel, et soovite selle sõnumi kustutada?",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "Kas olete kindel, et soovite selle versiooni kustutada? Alamversioonid seotakse uuesti selle versiooni vanemaga.",
@@ -239,6 +245,7 @@
"Automations": "",
"Available list": "Saadaolevate nimekiri",
"Available models": "Saadaolevad mudelid",
"Available Skills": "",
"Available Tools": "Saadaolevad tööriistad",
"available users": "saadaolevad kasutajad",
"available!": "saadaval!",
@@ -398,13 +405,17 @@
"ComfyUI Workflow": "ComfyUI töövoog",
"ComfyUI Workflow Nodes": "ComfyUI töövoo sõlmed",
"Comma separated Node Ids (e.g. 1 or 1,2)": "Komadega eraldatud sõlme ID-d (nt 1 või 1,2)",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "käsk",
"Command": "Käsk",
"Comment": "Kommentaar",
"Commit Message": "Commiti teade",
"Community Reviews": "Kogukonna ülevaated",
"Comparing with knowledge base...": "",
"Completions": "Lõpetamised",
"Compress Images in Channels": "Tihenda pildid kanalites",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "Samaaegsed päringud",
"Config": "Seadistus",
"Config imported successfully": "Seadistus edukalt imporditud",
@@ -537,12 +548,14 @@
"Delete a model": "Kustuta mudel",
"Delete All": "Kustuta kõik",
"Delete All Chats": "Kustuta kõik vestlused",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "Kustuta kogu selle kausta sisu",
"Delete automation?": "",
"Delete calendar": "",
"Delete Calendar": "",
"Delete Chat": "Kustuta vestlus",
"Delete chat?": "Kustutada vestlus?",
"Delete directory?": "",
"Delete Event": "",
"Delete File": "Kustuta fail",
"Delete folder?": "Kustutada kaust?",
@@ -579,6 +592,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Otsesed ühendused võimaldavad kasutajatel ühenduda oma OpenAI-ga ühilduvate API lõpp-punktidega.",
"Direct Message": "Otsesõnum",
"Direct Tool Servers": "Otsesed tööriistaserverid",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "Kataloogi valik tühistati",
"Disable All": "Keela kõik",
"Disable Code Interpreter": "Keela koodi interpretaator",
@@ -687,6 +705,7 @@
"Embedding Concurrent Requests": "Manustamise samaaegsed päringud",
"Embedding Model": "Manustamise mudel",
"Embedding Model Engine": "Manustamise mudeli mootor",
"Emoji": "",
"Emojis": "",
"Empty message": "Tühi sõnum",
"Enable All": "Luba kõik",
@@ -765,6 +784,7 @@
"Enter Kagi Search API Key": "Sisestage Kagi Search API võti",
"Enter Key Behavior": "Sisestage võtme käitumine",
"Enter language codes": "Sisestage keelekoodid",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "Sisestage MinerU API võti",
"Enter Mistral API Base URL": "Sisestage Mistral API baas-URL",
"Enter Mistral API Key": "Sisestage Mistral API võti",
@@ -901,6 +921,7 @@
"Failed to archive chat.": "Vestluse arhiveerimine ebaõnnestus.",
"Failed to attach file": "Faili lisamine ebaõnnestus",
"Failed to clear status": "Oleku tühjendamine ebaõnnestus",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "Ühendamine {{URL}} OpenAPI tööriistaserveriga ebaõnnestus",
"Failed to connect to {{URL}} terminal server": "Ühendamine {{URL}} terminali serveriga ebaõnnestus",
"Failed to copy link": "Lingi kopeerimine ebaõnnestus",
@@ -954,14 +975,16 @@
"File content updated successfully.": "Faili sisu edukalt uuendatud.",
"File Context": "Faili kontekst",
"File deleted successfully.": "Fail edukalt kustutatud.",
"File Extensions": "",
"File Mode": "Faili režiim",
"File moved.": "",
"File name": "Faili nimi",
"File not found.": "Faili ei leitud.",
"File removed successfully.": "Fail edukalt eemaldatud.",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "Faili suurus ei tohiks ületada {{maxSize}} MB.",
"File Upload": "Faili üleslaadimine",
"File uploaded successfully": "Fail edukalt üles laaditud",
"File uploaded!": "Fail üles laaditud!",
"Filename": "Failinimi",
"Files": "Failid",
"Filter": "Filter",
@@ -1177,13 +1200,13 @@
"Knowledge": "Teadmised",
"Knowledge Access": "Teadmiste juurdepääs",
"Knowledge Base": "Teadmiste baas",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "Teadmised edukalt loodud.",
"Knowledge deleted successfully.": "Teadmised edukalt kustutatud.",
"Knowledge Description": "Teadmiste kirjeldus",
"Knowledge exported successfully": "Teadmised edukalt eksporditud",
"Knowledge Name": "Teadmiste nimi",
"Knowledge Public Sharing": "Teadmiste avalik jagamine",
"Knowledge reset successfully.": "Teadmised edukalt lähtestatud.",
"Knowledge Sharing": "Teadmiste jagamine",
"Knowledge updated successfully": "Teadmised edukalt uuendatud",
"Kokoro.js (Browser)": "Kokoro.js (brauser)",
@@ -1227,6 +1250,7 @@
"Light": "Hele",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "Piira samaaegseid otsingupäringuid. 0 = piiramatu (vaikimisi). Määrake 1 järjestikuse täitmise jaoks (soovitatav API-de puhul, millel on ranged piirangud, nagu Brave tasuta tase).",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "Piirab samaaegsete manustamispäringute arvu. Määrake 0 piirangu puudumiseks.",
"Linkup API Key": "",
"List": "Nimekiri",
"List calendars, search, create, update, and delete calendar events": "",
"Listening...": "Kuulamine...",
@@ -1377,6 +1401,8 @@
"New calendar": "",
"New Calendar": "",
"New Chat": "Uus vestlus",
"New directory": "",
"New Directory": "",
"New Event": "",
"New File": "Uus fail",
"New Folder": "Uus kaust",
@@ -1422,11 +1448,13 @@
"No HTML, CSS, or JavaScript content found.": "HTML, CSS ega JavaScript sisu ei leitud.",
"No inference engine with management support found": "Järeldusmootorit haldamise toega ei leitud",
"No kernel": "Kernel puudub",
"No knowledge bases accessible": "",
"No knowledge bases found.": "Teadmiste baase ei leitud.",
"No knowledge found": "Teadmisi ei leitud",
"No limit": "",
"No memories to clear": "Pole mälestusi, mida kustutada",
"No model IDs": "Mudeli ID-d puuduvad",
"No models accessible": "",
"No models available": "Mudeleid pole saadaval",
"No models found": "Mudeleid ei leitud",
"No models selected": "Mudeleid pole valitud",
@@ -1447,6 +1475,7 @@
"No Terminal connection configured.": "Terminaliühendust pole seadistatud.",
"No terminal connections configured.": "Terminaliühendusi pole seadistatud.",
"No tool server connections configured.": "Tööriistaserveri ühendusi pole seadistatud.",
"No tools accessible": "",
"No tools found": "Tööriistu ei leitud",
"No users were found.": "Kasutajaid ei leitud.",
"No valves": "Klappe pole",
@@ -1486,6 +1515,7 @@
"On": "Sees",
"Once": "",
"OneDrive": "OneDrive",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "Aktiivne ainult siis, kui seade \"Kleebi suur tekst failina\" on sisse lülitatud.",
"Only active when the chat input is in focus and an LLM is generating a response.": "Aktiivne ainult siis, kui vestluse sisend on fookuses ja LLM genereerib vastust.",
"Only active when the chat input is in focus.": "Aktiivne ainult siis, kui vestluse sisend on fookuses.",
@@ -1557,6 +1587,7 @@
"PDF document (.pdf)": "PDF dokument (.pdf)",
"PDF Extract Images (OCR)": "PDF-ist piltide väljavõtmine (OCR)",
"PDF Loader Mode": "PDF laadija režiim",
"pdf, docx, pptx, xlsx": "",
"pending": "ootel",
"Pending": "Ootel",
"Pending User Overlay Content": "Ootava kasutaja kattekihi sisu",
@@ -1618,6 +1649,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "Prefiksi ID-d kasutatakse teiste ühendustega konfliktide vältimiseks, lisades mudeli ID-dele prefiksi - jätke tühjaks keelamiseks",
"Prevent File Creation": "Keela failide loomine",
"Preview": "Eelvaade",
"Preview Access": "",
"Previous 30 days": "Eelmised 30 päeva",
"Previous 7 days": "Eelmised 7 päeva",
"Previous message": "Eelmine sõnum",
@@ -1695,6 +1727,8 @@
"Remove from favorites": "Eemalda lemmikutest",
"Remove image": "Eemalda pilt",
"Remove Model": "Eemalda mudel",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._other": "",
"Rename": "Nimeta ümber",
"Renamed to {{name}}": "",
"Render Markdown in Assistant Messages": "",
@@ -1713,6 +1747,7 @@
"Reset": "Lähtesta",
"Reset All Models": "Lähtesta kõik mudelid",
"Reset Image": "Lähtesta pilt",
"Reset knowledge base?": "",
"Reset Upload Directory": "Lähtesta üleslaadimiste kataloog",
"Reset Vector Storage/Knowledge": "Lähtesta vektormälu/teadmised",
"Reset view": "Lähtesta vaade",
@@ -1780,6 +1815,7 @@
"Search Prompts": "Otsi sisendeid",
"Search Result Count": "Otsingutulemuste arv",
"Search Skills": "Otsi oskusi",
"Search skills...": "",
"Search the internet": "Otsi internetist",
"Search the web and fetch URLs": "Otsi veebist ja hangi URL-e",
"Search Tools": "Otsi tööriistu",
@@ -1977,6 +2013,8 @@
"Switch to JSON editor": "",
"Switch to visual editor": "",
"Sync": "Sünkrooni",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "Sünkroonimine lõpetatud!",
"Sync directory": "Sünkroniseeri kataloog",
"Sync Failed": "Sünkroonimine ebaõnnestus",
@@ -2049,7 +2087,6 @@
"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.": "See valik kontrollib, mitu tokenit säilitatakse konteksti värskendamisel. Näiteks kui see on määratud 2-le, säilitatakse vestluse konteksti viimased 2 tokenit. Konteksti säilitamine võib aidata säilitada vestluse järjepidevust, kuid võib vähendada võimet reageerida uutele teemadele.",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "See valik lubab või keelab Ollama arutlusfunktsiooni kasutamise, mis võimaldab mudelil enne vastuse genereerimist mõelda. Kui see on lubatud, võib mudel võtta hetke vestluse konteksti töötlemiseks ja läbimõeldum vastuse genereerimiseks.",
"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.": "See valik määrab maksimaalse tokenite arvu, mida mudel saab oma vastuses genereerida. Selle piirmäära suurendamine võimaldab mudelil anda pikemaid vastuseid, kuid võib suurendada ka ebavajaliku või ebaolulise sisu genereerimise tõenäosust.",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "See valik kustutab kõik olemasolevad failid kogust ja asendab need äsja üleslaaditud failidega.",
"This response was generated by \"{{model}}\"": "Selle vastuse genereeris \"{{model}}\"",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "",
"This will delete": "See kustutab",
@@ -2057,7 +2094,7 @@
"This will delete all models including custom models": "See kustutab kõik mudelid, sealhulgas kohandatud mudelid",
"This will delete all models including custom models and cannot be undone.": "See kustutab kõik mudelid, sealhulgas kohandatud mudelid, ja seda ei saa tagasi võtta.",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "See lähtestab teadmiste baasi ja sünkroniseerib kõik failid. Kas soovite jätkata?",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "Põhjalik selgitus",
"Thought": "",
"Thought for {{DURATION}}": "Mõtles {{DURATION}}",
@@ -2093,6 +2130,7 @@
"Toggle 1 source": "Lülita 1 allikas",
"Toggle details": "",
"Toggle Dictation": "Lülita dikteerimine",
"Toggle Mute": "",
"Toggle Sidebar": "Lülita külgriba",
"Toggle status history": "Lülita olekuajalugu",
"Toggle whether current connection is active.": "Lülita, kas praegune ühendus on aktiivne.",
@@ -2171,7 +2209,7 @@
"Upload Progress": "Üleslaadimise progress",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "Üleslaadimise edenemine: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)",
"Uploaded files or images": "Üleslaaditud failid või pildid",
"Uploading file...": "Faili üleslaadimine...",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "Üleslaadimine...",
"URL": "URL",
"URL is required": "URL on nõutav",
@@ -2191,6 +2229,7 @@
"User Groups": "Kasutajagrupid",
"User location successfully retrieved.": "Kasutaja asukoht edukalt hangitud.",
"User menu": "Kasutaja menüü",
"User Preview": "",
"User ratings (thumbs up/down)": "Kasutajate hinnangud (pöidlad üles/alla)",
"User Status": "Kasutaja olek",
"User Webhooks": "Kasutaja webhook'id",
+44 -5
View File
@@ -9,12 +9,17 @@
"[Today at] h:mm A": "",
"[Yesterday at] h:mm A": "",
"{{ models }}": "{{ models }}",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "",
"{{COUNT}} characters": "",
"{{COUNT}} extracted lines": "",
"{{COUNT}} files": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "",
"{{COUNT}} members": "",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "",
"{{COUNT}} Rows": "",
"{{count}} selected_one": "",
@@ -193,6 +198,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "",
"Are you sure you want to delete this channel?": "",
"Are you sure you want to delete this connection? This action cannot be undone.": "",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "",
"Are you sure you want to delete this message?": "",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "",
@@ -239,6 +245,7 @@
"Automations": "",
"Available list": "Zerrenda erabilgarria",
"Available models": "",
"Available Skills": "",
"Available Tools": "",
"available users": "erabilgarri dauden erabiltzaileak",
"available!": "eskuragarri!",
@@ -398,13 +405,17 @@
"ComfyUI Workflow": "ComfyUI Lan-fluxua",
"ComfyUI Workflow Nodes": "ComfyUI Lan-fluxu Nodoak",
"Comma separated Node Ids (e.g. 1 or 1,2)": "",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "",
"Command": "Komandoa",
"Comment": "",
"Commit Message": "",
"Community Reviews": "",
"Comparing with knowledge base...": "",
"Completions": "Osatzeak",
"Compress Images in Channels": "",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "Eskari Konkurrenteak",
"Config": "",
"Config imported successfully": "",
@@ -537,12 +548,14 @@
"Delete a model": "Ezabatu eredu bat",
"Delete All": "",
"Delete All Chats": "Ezabatu Txat Guztiak",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "",
"Delete automation?": "",
"Delete calendar": "",
"Delete Calendar": "",
"Delete Chat": "Ezabatu Txata",
"Delete chat?": "Ezabatu txata?",
"Delete directory?": "",
"Delete Event": "",
"Delete File": "",
"Delete folder?": "Ezabatu karpeta?",
@@ -579,6 +592,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "",
"Direct Message": "",
"Direct Tool Servers": "",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "",
"Disable All": "",
"Disable Code Interpreter": "",
@@ -687,6 +705,7 @@
"Embedding Concurrent Requests": "",
"Embedding Model": "Embedding Eredua",
"Embedding Model Engine": "Embedding Eredu Motorea",
"Emoji": "",
"Emojis": "",
"Empty message": "",
"Enable All": "",
@@ -765,6 +784,7 @@
"Enter Kagi Search API Key": "",
"Enter Key Behavior": "",
"Enter language codes": "Sartu hizkuntza kodeak",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "",
"Enter Mistral API Base URL": "",
"Enter Mistral API Key": "",
@@ -901,6 +921,7 @@
"Failed to archive chat.": "",
"Failed to attach file": "",
"Failed to clear status": "",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to connect to {{URL}} terminal server": "",
"Failed to copy link": "",
@@ -954,14 +975,16 @@
"File content updated successfully.": "Fitxategiaren edukia ongi eguneratu da.",
"File Context": "",
"File deleted successfully.": "",
"File Extensions": "",
"File Mode": "Fitxategi Modua",
"File moved.": "",
"File name": "",
"File not found.": "Ez da fitxategia aurkitu.",
"File removed successfully.": "Fitxategia ongi ezabatu da.",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "Fitxategiaren tamainak ez luke {{maxSize}} MB gainditu behar.",
"File Upload": "",
"File uploaded successfully": "",
"File uploaded!": "",
"Filename": "",
"Files": "Fitxategiak",
"Filter": "",
@@ -1177,13 +1200,13 @@
"Knowledge": "Ezagutza",
"Knowledge Access": "Ezagutzarako Sarbidea",
"Knowledge Base": "",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "Ezagutza ongi sortu da.",
"Knowledge deleted successfully.": "Ezagutza ongi ezabatu da.",
"Knowledge Description": "",
"Knowledge exported successfully": "",
"Knowledge Name": "",
"Knowledge Public Sharing": "",
"Knowledge reset successfully.": "Ezagutza ongi berrezarri da.",
"Knowledge Sharing": "",
"Knowledge updated successfully": "Ezagutza ongi eguneratu da.",
"Kokoro.js (Browser)": "",
@@ -1227,6 +1250,7 @@
"Light": "Argia",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "",
"Linkup API Key": "",
"List": "",
"List calendars, search, create, update, and delete calendar events": "",
"Listening...": "Entzuten...",
@@ -1377,6 +1401,8 @@
"New calendar": "",
"New Calendar": "",
"New Chat": "Txat berria",
"New directory": "",
"New Directory": "",
"New Event": "",
"New File": "",
"New Folder": "",
@@ -1422,11 +1448,13 @@
"No HTML, CSS, or JavaScript content found.": "Ez da HTML, CSS, edo JavaScript edukirik aurkitu.",
"No inference engine with management support found": "",
"No kernel": "",
"No knowledge bases accessible": "",
"No knowledge bases found.": "",
"No knowledge found": "Ez da ezagutzarik aurkitu",
"No limit": "",
"No memories to clear": "",
"No model IDs": "Ez dago modelo IDrik",
"No models accessible": "",
"No models available": "",
"No models found": "Ez da modelorik aurkitu",
"No models selected": "Ez da modelorik hautatu",
@@ -1447,6 +1475,7 @@
"No Terminal connection configured.": "",
"No terminal connections configured.": "",
"No tool server connections configured.": "",
"No tools accessible": "",
"No tools found": "",
"No users were found.": "Ez da erabiltzailerik aurkitu.",
"No valves": "",
@@ -1486,6 +1515,7 @@
"On": "Piztuta",
"Once": "",
"OneDrive": "",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "",
"Only active when the chat input is in focus and an LLM is generating a response.": "",
"Only active when the chat input is in focus.": "",
@@ -1557,6 +1587,7 @@
"PDF document (.pdf)": "PDF dokumentua (.pdf)",
"PDF Extract Images (OCR)": "PDF irudiak erauzi (OCR)",
"PDF Loader Mode": "",
"pdf, docx, pptx, xlsx": "",
"pending": "zain",
"Pending": "",
"Pending User Overlay Content": "",
@@ -1618,6 +1649,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "Aurrizki IDa erabiltzen da beste konexioekin gatazkak saihesteko modelo IDei aurrizki bat gehituz - utzi hutsik desgaitzeko",
"Prevent File Creation": "",
"Preview": "",
"Preview Access": "",
"Previous 30 days": "Aurreko 30 egunak",
"Previous 7 days": "Aurreko 7 egunak",
"Previous message": "",
@@ -1695,6 +1727,8 @@
"Remove from favorites": "",
"Remove image": "",
"Remove Model": "Kendu modeloa",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._other": "",
"Rename": "Berrizendatu",
"Renamed to {{name}}": "",
"Render Markdown in Assistant Messages": "",
@@ -1713,6 +1747,7 @@
"Reset": "Berrezarri",
"Reset All Models": "",
"Reset Image": "Berrezarri irudia",
"Reset knowledge base?": "",
"Reset Upload Directory": "Berrezarri karga direktorioa",
"Reset Vector Storage/Knowledge": "Berrezarri bektore biltegia/ezagutza",
"Reset view": "",
@@ -1780,6 +1815,7 @@
"Search Prompts": "Bilatu prompt-ak",
"Search Result Count": "Bilaketa emaitzen kopurua",
"Search Skills": "",
"Search skills...": "",
"Search the internet": "",
"Search the web and fetch URLs": "",
"Search Tools": "Bilaketa tresnak",
@@ -1977,6 +2013,8 @@
"Switch to JSON editor": "",
"Switch to visual editor": "",
"Sync": "",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "",
"Sync directory": "Sinkronizatu direktorioa",
"Sync Failed": "",
@@ -2049,7 +2087,6 @@
"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.": "",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "",
"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.": "",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Aukera honek bilduman dauden fitxategi guztiak ezabatuko ditu eta berriki kargatutako fitxategiekin ordezkatuko ditu.",
"This response was generated by \"{{model}}\"": "Erantzun hau \"{{model}}\" modeloak sortu du",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "",
"This will delete": "Honek ezabatuko du",
@@ -2057,7 +2094,7 @@
"This will delete all models including custom models": "Honek modelo guztiak ezabatuko ditu, modelo pertsonalizatuak barne",
"This will delete all models including custom models and cannot be undone.": "Honek modelo guztiak ezabatuko ditu, modelo pertsonalizatuak barne, eta ezin da desegin.",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "Honek ezagutza-basea berrezarri eta fitxategi guztiak sinkronizatuko ditu. Jarraitu nahi duzu?",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "Azalpen sakona",
"Thought": "",
"Thought for {{DURATION}}": "",
@@ -2093,6 +2130,7 @@
"Toggle 1 source": "",
"Toggle details": "",
"Toggle Dictation": "",
"Toggle Mute": "",
"Toggle Sidebar": "",
"Toggle status history": "",
"Toggle whether current connection is active.": "",
@@ -2171,7 +2209,7 @@
"Upload Progress": "Kargaren aurrerapena",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "",
"Uploaded files or images": "",
"Uploading file...": "",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "",
"URL": "URLa",
"URL is required": "",
@@ -2191,6 +2229,7 @@
"User Groups": "",
"User location successfully retrieved.": "Erabiltzailearen kokapena ongi berreskuratu da.",
"User menu": "",
"User Preview": "",
"User ratings (thumbs up/down)": "",
"User Status": "",
"User Webhooks": "",
+44 -5
View File
@@ -9,12 +9,17 @@
"[Today at] h:mm A": "[امروز در] h:mm A",
"[Yesterday at] h:mm A": "[دیروز در] h:mm A",
"{{ models }}": "{{ models }}",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "{{COUNT}} ابزار موجود",
"{{COUNT}} characters": "{{COUNT}} نویسه",
"{{COUNT}} extracted lines": "{{COUNT}} خط استخراج شده",
"{{COUNT}} files": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "{{COUNT}} خط پنهان",
"{{COUNT}} members": "",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "{{COUNT}} پاسخ",
"{{COUNT}} Rows": "",
"{{count}} selected_one": "",
@@ -193,6 +198,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "",
"Are you sure you want to delete this channel?": "آیا مطمئن هستید که می\u200cخواهید این کانال را حذف کنید؟",
"Are you sure you want to delete this connection? This action cannot be undone.": "",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "",
"Are you sure you want to delete this message?": "آیا مطمئن هستید که می\u200cخواهید این پیام را حذف کنید؟",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "",
@@ -239,6 +245,7 @@
"Automations": "",
"Available list": "فهرست دردسترس",
"Available models": "",
"Available Skills": "",
"Available Tools": "ابزارهای موجود",
"available users": "کاربران در دسترس",
"available!": "در دسترس!",
@@ -398,13 +405,17 @@
"ComfyUI Workflow": "گردش کار کومیوآی",
"ComfyUI Workflow Nodes": "گره\u200cهای گردش کار کومیوآی",
"Comma separated Node Ids (e.g. 1 or 1,2)": "شناسه\u200cهای گره که با کاما جدا شده\u200cاند (مثلاً ۱ یا ۱,۲)",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "",
"Command": "دستور",
"Comment": "نظر",
"Commit Message": "",
"Community Reviews": "",
"Comparing with knowledge base...": "",
"Completions": "تکمیل\u200cها",
"Compress Images in Channels": "فشرده\u200cسازی تصاویر در کانال\u200cها",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "درخواست های همزمان",
"Config": "",
"Config imported successfully": "پیکربندی با موفقیت وارد شد",
@@ -537,12 +548,14 @@
"Delete a model": "حذف یک مدل",
"Delete All": "",
"Delete All Chats": "حذف همه گفتگوها",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "",
"Delete automation?": "",
"Delete calendar": "",
"Delete Calendar": "",
"Delete Chat": "حذف گپ",
"Delete chat?": "گفتگو حذف شود؟",
"Delete directory?": "",
"Delete Event": "",
"Delete File": "",
"Delete folder?": "پوشه حذف شود؟",
@@ -579,6 +592,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "اتصالات مستقیم به کاربران اجازه می\u200cدهد به نقاط پایانی API سازگار با OpenAI خود متصل شوند.",
"Direct Message": "",
"Direct Tool Servers": "سرورهای ابزار مستقیم",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "انتخاب دایرکتوری لغو شد",
"Disable All": "",
"Disable Code Interpreter": "غیرفعال کردن مفسر کد",
@@ -687,6 +705,7 @@
"Embedding Concurrent Requests": "",
"Embedding Model": "مدل پیدائش",
"Embedding Model Engine": "محرک مدل پیدائش",
"Emoji": "",
"Emojis": "",
"Empty message": "",
"Enable All": "",
@@ -765,6 +784,7 @@
"Enter Kagi Search API Key": "کلید API جستجوی کاگی را وارد کنید",
"Enter Key Behavior": "رفتار کلید را وارد کنید",
"Enter language codes": "کد زبان را وارد کنید",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "",
"Enter Mistral API Base URL": "آدرس پایه API میسترال را وارد کنید",
"Enter Mistral API Key": "کلید API میسترال را وارد کنید",
@@ -901,6 +921,7 @@
"Failed to archive chat.": "",
"Failed to attach file": "",
"Failed to clear status": "",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "خطا در اتصال به سرور ابزار OpenAPI {{URL}}",
"Failed to connect to {{URL}} terminal server": "",
"Failed to copy link": "کپی لینک ناموفق بود",
@@ -954,14 +975,16 @@
"File content updated successfully.": "محتوای پرونده با موفقیت به\u200cروز شد.",
"File Context": "",
"File deleted successfully.": "",
"File Extensions": "",
"File Mode": "حالت پرونده",
"File moved.": "",
"File name": "",
"File not found.": "پرونده یافت نشد.",
"File removed successfully.": "پرونده با موفقیت حذف شد.",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "حجم پرونده نبایستی از {{maxSize}} MB بیشتر باشد.",
"File Upload": "آپلود فایل",
"File uploaded successfully": "پرونده با موفقیت بارگذاری شد",
"File uploaded!": "",
"Filename": "",
"Files": "پرونده\u200cها",
"Filter": "فیلتر",
@@ -1177,13 +1200,13 @@
"Knowledge": "دانش",
"Knowledge Access": "دسترسی به دانش",
"Knowledge Base": "پایگاه دانش",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "دانش با موفقیت ایجاد شد.",
"Knowledge deleted successfully.": "دانش با موفقیت حذف شد.",
"Knowledge Description": "توضیحات دانش",
"Knowledge exported successfully": "",
"Knowledge Name": "نام دانش",
"Knowledge Public Sharing": "اشتراک\u200cگذاری عمومی دانش",
"Knowledge reset successfully.": "دانش با موفقیت بازنشانی شد.",
"Knowledge Sharing": "",
"Knowledge updated successfully": "دانش با موفقیت به\u200cروز شد",
"Kokoro.js (Browser)": "Kokoro.js (مرورگر)",
@@ -1227,6 +1250,7 @@
"Light": "روشن",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "",
"Linkup API Key": "",
"List": "",
"List calendars, search, create, update, and delete calendar events": "",
"Listening...": "در حال گوش دادن...",
@@ -1377,6 +1401,8 @@
"New calendar": "",
"New Calendar": "",
"New Chat": "گپ جدید",
"New directory": "",
"New Directory": "",
"New Event": "",
"New File": "",
"New Folder": "پوشه جدید",
@@ -1422,11 +1448,13 @@
"No HTML, CSS, or JavaScript content found.": "محتوای HTML، CSS یا JavaScript یافت نشد.",
"No inference engine with management support found": "موتور استنتاج با پشتیبانی مدیریت یافت نشد",
"No kernel": "",
"No knowledge bases accessible": "",
"No knowledge bases found.": "",
"No knowledge found": "دانشی یافت نشد",
"No limit": "",
"No memories to clear": "حافظه\u200cای برای پاک کردن وجود ندارد",
"No model IDs": "شناسه مدلی وجود ندارد",
"No models accessible": "",
"No models available": "",
"No models found": "مدلی یافت نشد",
"No models selected": "مدلی انتخاب نشده است",
@@ -1447,6 +1475,7 @@
"No Terminal connection configured.": "",
"No terminal connections configured.": "",
"No tool server connections configured.": "",
"No tools accessible": "",
"No tools found": "هیچ ابزاری یافت نشد",
"No users were found.": "کاربری یافت نشد.",
"No valves": "بدون دریچه",
@@ -1486,6 +1515,7 @@
"On": "روشن",
"Once": "",
"OneDrive": "وان\u200cدرایو",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "فقط زمانی فعال است که تنظیم «چسباندن متن بزرگ به عنوان فایل» روشن باشد.",
"Only active when the chat input is in focus and an LLM is generating a response.": "فقط زمانی فعال است که ورودی چت در فوکوس باشد و یک LLM در حال تولید پاسخ باشد.",
"Only active when the chat input is in focus.": "فقط زمانی فعال است که ورودی چت در فوکوس باشد.",
@@ -1557,6 +1587,7 @@
"PDF document (.pdf)": "PDF سند (.pdf)",
"PDF Extract Images (OCR)": "استخراج تصاویر از PDF (OCR)",
"PDF Loader Mode": "",
"pdf, docx, pptx, xlsx": "",
"pending": "در انتظار",
"Pending": "در انتظار",
"Pending User Overlay Content": "محتوای پوشش کاربر در انتظار",
@@ -1618,6 +1649,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "شناسه پیشوند برای جلوگیری از تداخل با سایر اتصالات با افزودن پیشوند به شناسه\u200cهای مدل استفاده می\u200cشود - برای غیرفعال کردن خالی بگذارید",
"Prevent File Creation": "جلوگیری از ایجاد فایل",
"Preview": "پیش\u200cنمایش",
"Preview Access": "",
"Previous 30 days": "30 روز قبل",
"Previous 7 days": "7 روز قبل",
"Previous message": "پیام قبلی",
@@ -1695,6 +1727,8 @@
"Remove from favorites": "",
"Remove image": "حذف تصویر",
"Remove Model": "حذف مدل",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._other": "",
"Rename": "تغییر نام",
"Renamed to {{name}}": "",
"Render Markdown in Assistant Messages": "",
@@ -1713,6 +1747,7 @@
"Reset": "بازنشانی",
"Reset All Models": "بازنشانی همه مدل\u200cها",
"Reset Image": "بازنشانی تصویر",
"Reset knowledge base?": "",
"Reset Upload Directory": "بازنشانی پوشه آپلود",
"Reset Vector Storage/Knowledge": "بازنشانی ذخیره\u200cسازی برداری/دانش",
"Reset view": "بازنشانی نما",
@@ -1780,6 +1815,7 @@
"Search Prompts": "جستجوی پرامپت\u200cها",
"Search Result Count": "تعداد نتایج جستجو",
"Search Skills": "",
"Search skills...": "",
"Search the internet": "جستجوی اینترنت",
"Search the web and fetch URLs": "",
"Search Tools": "ابزارهای جستجو",
@@ -1977,6 +2013,8 @@
"Switch to JSON editor": "",
"Switch to visual editor": "",
"Sync": "",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "",
"Sync directory": "هم\u200cگام\u200cسازی پوشه",
"Sync Failed": "",
@@ -2049,7 +2087,6 @@
"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.": "این گزینه کنترل می\u200cکند که هنگام تازه\u200cسازی متن، چند توکن حفظ شوند. برای مثال، اگر روی 2 تنظیم شود، 2 توکن آخر متن مکالمه حفظ خواهند شد. حفظ متن می\u200cتواند به حفظ پیوستگی مکالمه کمک کند، اما ممکن است توانایی پاسخ به موضوعات جدید را کاهش دهد.",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "این گزینه استفاده از ویژگی استدلال در اُلاما را فعال یا غیرفعال می\u200cکند، که به مدل اجازه می\u200cدهد قبل از تولید پاسخ فکر کند. هنگامی که فعال باشد، مدل می\u200cتواند لحظه\u200cای را برای پردازش زمینه مکالمه صرف کند و یک پاسخ متفکرانه\u200cتر تولید کند.",
"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.": "این گزینه حداکثر تعداد توکن\u200cهایی را که مدل می\u200cتواند در پاسخ خود تولید کند تنظیم می\u200cکند. افزایش این محدودیت به مدل اجازه می\u200cدهد پاسخ\u200cهای طولانی\u200cتری ارائه دهد، اما ممکن است احتمال تولید محتوای بی\u200cفایده یا نامربوط را نیز افزایش دهد.",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "این گزینه تمام فایل\u200cهای موجود در مجموعه را حذف کرده و با فایل\u200cهای جدید آپلود شده جایگزین می\u200cکند.",
"This response was generated by \"{{model}}\"": "این پاسخ توسط \"{{model}}\" تولید شده است",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "",
"This will delete": "این حذف خواهد شد",
@@ -2057,7 +2094,7 @@
"This will delete all models including custom models": "این همه مدل\u200cها از جمله مدل\u200cهای سفارشی را حذف خواهد کرد",
"This will delete all models including custom models and cannot be undone.": "این همه مدل\u200cها از جمله مدل\u200cهای سفارشی را حذف خواهد کرد و قابل بازگشت نیست.",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "این پایگاه دانش را بازنشانی کرده و همه فایل\u200cها را همگام\u200cسازی خواهد کرد. آیا می\u200cخواهید ادامه دهید؟",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "توضیح کامل",
"Thought": "",
"Thought for {{DURATION}}": "فکر کردن برای {{DURATION}}",
@@ -2093,6 +2130,7 @@
"Toggle 1 source": "",
"Toggle details": "",
"Toggle Dictation": "",
"Toggle Mute": "",
"Toggle Sidebar": "تغییر وضعیت نوار کناری",
"Toggle status history": "",
"Toggle whether current connection is active.": "تغییر وضعیت فعال بودن اتصال فعلی.",
@@ -2171,7 +2209,7 @@
"Upload Progress": "پیشرفت آپلود",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "پیشرفت آپلود: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}٪)",
"Uploaded files or images": "",
"Uploading file...": "",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "",
"URL": "آدرس اینترنتی",
"URL is required": "آدرس URL مورد نیاز است",
@@ -2191,6 +2229,7 @@
"User Groups": "گروه\u200cهای کاربری",
"User location successfully retrieved.": "موقعیت مکانی کاربر با موفقیت دریافت شد.",
"User menu": "منوی کاربر",
"User Preview": "",
"User ratings (thumbs up/down)": "",
"User Status": "",
"User Webhooks": "وب\u200cهوک\u200cهای کاربر",
+44 -5
View File
@@ -9,12 +9,17 @@
"[Today at] h:mm A": "[Tänään] h:mm A",
"[Yesterday at] h:mm A": "[Eilen] h:mm A",
"{{ models }}": "{{ mallit }}",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "{{COUNT}} työkalua saatavilla",
"{{COUNT}} characters": "{{COUNT}} kirjainta",
"{{COUNT}} extracted lines": "{{COUNT}} poimittua riviä",
"{{COUNT}} files": "{{COUNT}} tiedostoa",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "{{COUNT}} piilotettua riviä",
"{{COUNT}} members": "{{COUNT}} jäsentä",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "{{COUNT}} vastausta",
"{{COUNT}} Rows": "{{COUNT}} riviä",
"{{count}} selected_one": "",
@@ -193,6 +198,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "Haluatko varmasti poistaa kaikki keskustelut? Tätä toimintoa ei voi peruuttaa.",
"Are you sure you want to delete this channel?": "Haluatko varmasti poistaa tämän kanavan?",
"Are you sure you want to delete this connection? This action cannot be undone.": "Haluatko varmasti poistaa yhteyden? Tätä toimintoa ei voi peruuttaa.",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "Haluatko varmasti poistaa muiston? Tätä toimintoa ei voi peruuttaa.",
"Are you sure you want to delete this message?": "Haluatko varmasti poistaa tämän viestin?",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "Haluatko varmasti poistaa tämän version? Alaversiot linkitetään uudelleen tämän version ylätason versioon.",
@@ -239,6 +245,7 @@
"Automations": "Automaatiot",
"Available list": "Käytettävissä oleva luettelo",
"Available models": "Käytettävissä olevat mallit",
"Available Skills": "",
"Available Tools": "Käytettävissä olevat työkalut",
"available users": "käytettävissä olevat käyttäjät",
"available!": "saatavilla!",
@@ -398,13 +405,17 @@
"ComfyUI Workflow": "ComfyUI-työnkulku",
"ComfyUI Workflow Nodes": "ComfyUI-työnkulun solmut",
"Comma separated Node Ids (e.g. 1 or 1,2)": "Pilkulla erotellut Node Id:t (esim. 1 tai 1,2)",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "komento",
"Command": "Komento",
"Comment": "Kommentti",
"Commit Message": "Vahvistusviesti",
"Community Reviews": "Yhteisön arvostelut",
"Comparing with knowledge base...": "",
"Completions": "Täydennykset",
"Compress Images in Channels": "Pakkaa kuvat kanavissa",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "Samanaikaiset pyynnöt",
"Config": "Määritykset",
"Config imported successfully": "Määritysten tuonti onnistui",
@@ -537,12 +548,14 @@
"Delete a model": "Poista malli",
"Delete All": "Poista kaikki",
"Delete All Chats": "Poista kaikki keskustelut",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "Poista kaikki sisällöt tästä kansiosta",
"Delete automation?": "Poista automaatio?",
"Delete calendar": "Poista kalenteri",
"Delete Calendar": "Poista kalenteri",
"Delete Chat": "Poista keskustelu",
"Delete chat?": "Haluatko varmasti poistaa tämän keskustelun?",
"Delete directory?": "",
"Delete Event": "Poista tapahtuma?",
"Delete File": "Poista tiedosto",
"Delete folder?": "Haluatko varmasti poistaa tämän kansion?",
@@ -579,6 +592,11 @@
"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 Message": "Suora viesti",
"Direct Tool Servers": "Suorat työkalu palvelimet",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "Hakemiston valinta keskeytettiin",
"Disable All": "Poista kaikki käytöstä",
"Disable Code Interpreter": "Poista Koodin suoritus käytöstä",
@@ -687,6 +705,7 @@
"Embedding Concurrent Requests": "Samanaikaiset upotuspyynnöt",
"Embedding Model": "Upotusmalli",
"Embedding Model Engine": "Upotusmallin moottori",
"Emoji": "",
"Emojis": "Emojit",
"Empty message": "Tyhjä viesti",
"Enable All": "Ota kaikki käyttöön",
@@ -765,6 +784,7 @@
"Enter Kagi Search API Key": "Kirjoita Kagi Search API -avain",
"Enter Key Behavior": "Enter näppäimen käyttäytyminen",
"Enter language codes": "Kirjoita kielikoodit",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "Kirjoita MinerU API-avain",
"Enter Mistral API Base URL": "Kirjoita Mistral API verkko-osoite",
"Enter Mistral API Key": "Kirjoita Mistral API-avain",
@@ -901,6 +921,7 @@
"Failed to archive chat.": "Keskustelun arkistointi epäonnistui.",
"Failed to attach file": "Tiedoston liittäminen epäonnistui",
"Failed to clear status": "Tilan tyhjentäminen epäonnistui",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "Yhdistäminen {{URL}} OpenAPI työkalu palvelimeen epäonnistui",
"Failed to connect to {{URL}} terminal server": "Yhdistäminen {{URL}} päätepalvelimeen epäonnistui",
"Failed to copy link": "Linkin kopiointi epäonnistui",
@@ -954,14 +975,16 @@
"File content updated successfully.": "Tiedoston sisältö päivitetty onnistuneesti.",
"File Context": "Tiedoston konteksti",
"File deleted successfully.": "Tiedosto poistettiin onnistuneesti.",
"File Extensions": "",
"File Mode": "Tiedostotila",
"File moved.": "",
"File name": "Tiedostonimi",
"File not found.": "Tiedostoa ei löytynyt.",
"File removed successfully.": "Tiedosto poistettu onnistuneesti.",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "Tiedoston koko ei saa ylittää {{maxSize}} MB.",
"File Upload": "Tiedoston lataus",
"File uploaded successfully": "Tiedosto ladattiin onnistuneesti",
"File uploaded!": "Tiedosto ladattu!",
"Filename": "Tiedostonimi",
"Files": "Tiedostot",
"Filter": "Suodata",
@@ -1177,13 +1200,13 @@
"Knowledge": "Tietämys",
"Knowledge Access": "Tiedon käyttöoikeus",
"Knowledge Base": "Tietokanta",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "Tietokanta luotu onnistuneesti.",
"Knowledge deleted successfully.": "Tietokanta poistettu onnistuneesti.",
"Knowledge Description": "Tietokannan kuvaus",
"Knowledge exported successfully": "Tietokanta viety onnistuneesti",
"Knowledge Name": "Tietokannan nimi",
"Knowledge Public Sharing": "Tietokannan julkinen jakaminen",
"Knowledge reset successfully.": "Tietokanta nollattu onnistuneesti.",
"Knowledge Sharing": "Tietokannan jakaminen",
"Knowledge updated successfully": "Tietokanta päivitetty onnistuneesti",
"Kokoro.js (Browser)": "Kokoro.js (selain)",
@@ -1227,6 +1250,7 @@
"Light": "Vaalea",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "Rajoita samanaikaisia hakukyselyitä. 0 = rajoittamaton (oletus). Aseta arvoon 1 peräkkäistä suoritusta varten (suositellaan API-rajapinnoille, joilla on tiukat nopeusrajoitukset, kuten Brave-ilmaistaso).",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "Rajoittaa samanaikaisten upotuspyyntöjen määrää. Arvolla 0 ei rajoituksia.",
"Linkup API Key": "",
"List": "Lista",
"List calendars, search, create, update, and delete calendar events": "Listaa kalenterit, hae, luo, päivitä ja poista kalenteritapahtumia",
"Listening...": "Kuuntelee...",
@@ -1377,6 +1401,8 @@
"New calendar": "Uusi kalenteri",
"New Calendar": "Uusi kalenteri",
"New Chat": "Uusi keskustelu",
"New directory": "",
"New Directory": "",
"New Event": "Uusi tapahtuma",
"New File": "Uusi tiedosto",
"New Folder": "Uusi kansio",
@@ -1422,11 +1448,13 @@
"No HTML, CSS, or JavaScript content found.": "HTML-, CSS- tai JavaScript-sisältöä ei löytynyt.",
"No inference engine with management support found": "",
"No kernel": "Ei kerneliä",
"No knowledge bases accessible": "",
"No knowledge bases found.": "Tietokantoja ei löytynyt.",
"No knowledge found": "Tietoa ei löytynyt",
"No limit": "Ei rajoituksia",
"No memories to clear": "Ei muistia tyhjennettäväksi",
"No model IDs": "Ei mallitunnuksia",
"No models accessible": "",
"No models available": "Malleja ei saatavilla",
"No models found": "Malleja ei löytynyt",
"No models selected": "Malleja ei ole valittu",
@@ -1447,6 +1475,7 @@
"No Terminal connection configured.": "Ei pääteyhteyttä määritettynä.",
"No terminal connections configured.": "Ei pääteyhteyksiä määritettynä.",
"No tool server connections configured.": "Työkalupalvelinyhteyksiä ei ole määritetty.",
"No tools accessible": "",
"No tools found": "Työkaluja ei löytynyt",
"No users were found.": "Käyttäjiä ei löytynyt.",
"No valves": "Ei venttiileitä",
@@ -1486,6 +1515,7 @@
"On": "Käytössä",
"Once": "Kerran",
"OneDrive": "OneDrive",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "Aktiivinen vain, kun \"Liitä suuri teksti tiedostona\" -asetus on käytössä.",
"Only active when the chat input is in focus and an LLM is generating a response.": "Aktiivinen vain, kun tekstikenttä on kohdistettuna ja LLM luo vastausta.",
"Only active when the chat input is in focus.": "Aktiivinen vain, kun tekstikenttä on valittuna.",
@@ -1557,6 +1587,7 @@
"PDF document (.pdf)": "PDF-asiakirja (.pdf)",
"PDF Extract Images (OCR)": "Poimi kuvat PDF:stä (OCR)",
"PDF Loader Mode": "PDF latausmoodi",
"pdf, docx, pptx, xlsx": "",
"pending": "odottaa",
"Pending": "Odottaa",
"Pending User Overlay Content": "Odottavien käyttäjien sisältö",
@@ -1618,6 +1649,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "Etuliite-ID:tä käytetään välttämään ristiriidat muiden yhteyksien kanssa lisäämällä etuliite mallitunnuksiin - jätä tyhjäksi, jos haluat ottaa sen pois käytöstä",
"Prevent File Creation": "Estä tiedostojen luonti",
"Preview": "Esikatselu",
"Preview Access": "",
"Previous 30 days": "Edelliset 30 päivää",
"Previous 7 days": "Edelliset 7 päivää",
"Previous message": "Edellinen viesti",
@@ -1695,6 +1727,8 @@
"Remove from favorites": "Poista suosikeista",
"Remove image": "Poista kuva",
"Remove Model": "Poista malli",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._other": "",
"Rename": "Nimeä uudelleen",
"Renamed to {{name}}": "Nimetty uudelleen {{name}}",
"Render Markdown in Assistant Messages": "Renderöi Markdown avustajan viesteissä",
@@ -1713,6 +1747,7 @@
"Reset": "Palauta",
"Reset All Models": "Palauta kaikki mallit",
"Reset Image": "Palauta kuva",
"Reset knowledge base?": "",
"Reset Upload Directory": "Palauta latauspolku",
"Reset Vector Storage/Knowledge": "Tyhjennä vektoritallennukset/tietämys",
"Reset view": "Palauta näkymä",
@@ -1780,6 +1815,7 @@
"Search Prompts": "Hae kehotteita",
"Search Result Count": "Hakutulosten määrä",
"Search Skills": "Etsi taitoja",
"Search skills...": "",
"Search the internet": "Hae verkosta",
"Search the web and fetch URLs": "Hae verkosta ja hae URL-osoitteita",
"Search Tools": "Hae työkaluja",
@@ -1977,6 +2013,8 @@
"Switch to JSON editor": "Vaihda JSON-editoriin",
"Switch to visual editor": "Vaihda visuaaliseen editoriin",
"Sync": "Synkronoi",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "Synkronointi valmis!",
"Sync directory": "Synkronoitu hakemisto",
"Sync Failed": "Synkronointi epäonnistui",
@@ -2049,7 +2087,6 @@
"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.": "Tämä asetus määrittää, kuinka monta tokenia säilytetään kontekstia päivitettäessä. Jos arvoksi on asetettu esimerkiksi 2, keskustelukontekstin kaksi viimeistä tokenia säilytetään. Kontekstin säilyttäminen voi auttaa ylläpitämään keskustelun jatkuvuutta, mutta se voi heikentää kykyä vastata uusiin aiheisiin.",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "Tämä vaihtoehto mahdollistaa tai estää päättelyominaisuuden käytön Ollama:ssa, mikä antaa mallille mahdollisuuden miettiä ennen vastauksen tuottamista. Kun se on käytössä, malli voi ottaa hetken aikaa käsitellä keskustelun kontekstia ja tuottaa ajatellumman vastauksen.",
"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.": "Tämä vaihtoehto asettaa mallin vastauksessaan luomien tokenien enimmäismäärän. Tämän rajan nostaminen antaa mallille mahdollisuuden tarjota pidempiä vastauksia, mutta se voi myös lisätä hyödyttömän tai epäolennaisen sisällön luomisen todennäköisyyttä.",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Tämä vaihtoehto poistaa kaikki kokoelman nykyiset tiedostot ja korvaa ne uusilla ladatuilla tiedostoilla.",
"This response was generated by \"{{model}}\"": "Tämän vastauksen tuotti \"{{model}}\"",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "Tämä mallipohja sisältää useita kontekstipaikkamerkkejä ([context] tai {{CONTEXT}}). Konteksti lisätään jokaiseen esiintymään.",
"This will delete": "Tämä poistaa",
@@ -2057,7 +2094,7 @@
"This will delete all models including custom models": "Tämä poistaa kaikki mallit mukaan lukien mukautetut mallit",
"This will delete all models including custom models and cannot be undone.": "Tämä poistaa kaikki mallit, mukaan lukien mukautetut mallit, eikä sitä voi peruuttaa.",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "Tämä poistaa pysyvästi kalenterin \"{{name}}\" ja kaikki sen tapahtumat. Tätä toimintoa ei voi peruuttaa.",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "Tämä nollaa tietokannan ja synkronoi kaikki tiedostot. Haluatko jatkaa?",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "Perusteellinen selitys",
"Thought": "Ajatus",
"Thought for {{DURATION}}": "Ajatteli {{DURATION}}",
@@ -2093,6 +2130,7 @@
"Toggle 1 source": "Näytä/piilota 1 lähde",
"Toggle details": "Näytä/piilota yksityiskohdat",
"Toggle Dictation": "Sanelu päälle/pois",
"Toggle Mute": "",
"Toggle Sidebar": "Näytä/piilota sivupalkki",
"Toggle status history": "Näytä/piilota tilahistoria",
"Toggle whether current connection is active.": "Vaihda, onko nykyinen yhteys aktiivinen",
@@ -2171,7 +2209,7 @@
"Upload Progress": "Latauksen edistyminen",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "Latauksen edistyminen: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)",
"Uploaded files or images": "Ladatut tiedostot tai kuvat",
"Uploading file...": "Ladataan tiedostoa...",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "Ladataan...",
"URL": "URL",
"URL is required": "URL vaaditaan",
@@ -2191,6 +2229,7 @@
"User Groups": "Käyttäjäryhmät",
"User location successfully retrieved.": "Käyttäjän sijainti haettu onnistuneesti.",
"User menu": "Käyttäjävalikko",
"User Preview": "",
"User ratings (thumbs up/down)": "Käyttäjien arviot (peukku ylös/alas)",
"User Status": "Käyttäjän tila",
"User Webhooks": "Käyttäjän Webhook:it",
+44 -5
View File
@@ -9,12 +9,17 @@
"[Today at] h:mm A": "",
"[Yesterday at] h:mm A": "",
"{{ models }}": "",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "",
"{{COUNT}} characters": "",
"{{COUNT}} extracted lines": "",
"{{COUNT}} files": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "",
"{{COUNT}} members": "",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "",
"{{COUNT}} Rows": "",
"{{count}} selected_one": "",
@@ -194,6 +199,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "",
"Are you sure you want to delete this channel?": "",
"Are you sure you want to delete this connection? This action cannot be undone.": "",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "",
"Are you sure you want to delete this message?": "",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "",
@@ -240,6 +246,7 @@
"Automations": "",
"Available list": "",
"Available models": "",
"Available Skills": "",
"Available Tools": "",
"available users": "",
"available!": "",
@@ -399,13 +406,17 @@
"ComfyUI Workflow": "",
"ComfyUI Workflow Nodes": "",
"Comma separated Node Ids (e.g. 1 or 1,2)": "",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "",
"Command": "",
"Comment": "Komento",
"Commit Message": "",
"Community Reviews": "",
"Comparing with knowledge base...": "",
"Completions": "",
"Compress Images in Channels": "",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "",
"Config": "",
"Config imported successfully": "",
@@ -538,12 +549,14 @@
"Delete a model": "",
"Delete All": "Burahin ang Lahat",
"Delete All Chats": "",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "",
"Delete automation?": "",
"Delete calendar": "",
"Delete Calendar": "",
"Delete Chat": "Burahin ang Chat",
"Delete chat?": "",
"Delete directory?": "",
"Delete Event": "",
"Delete File": "",
"Delete folder?": "",
@@ -580,6 +593,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "",
"Direct Message": "Direktang Mensahe",
"Direct Tool Servers": "",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "",
"Disable All": "",
"Disable Code Interpreter": "",
@@ -688,6 +706,7 @@
"Embedding Concurrent Requests": "",
"Embedding Model": "",
"Embedding Model Engine": "",
"Emoji": "",
"Emojis": "Mga Emoji",
"Empty message": "",
"Enable All": "",
@@ -766,6 +785,7 @@
"Enter Kagi Search API Key": "",
"Enter Key Behavior": "",
"Enter language codes": "",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "",
"Enter Mistral API Base URL": "",
"Enter Mistral API Key": "",
@@ -902,6 +922,7 @@
"Failed to archive chat.": "",
"Failed to attach file": "",
"Failed to clear status": "",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to connect to {{URL}} terminal server": "",
"Failed to copy link": "",
@@ -955,14 +976,16 @@
"File content updated successfully.": "",
"File Context": "",
"File deleted successfully.": "",
"File Extensions": "",
"File Mode": "",
"File moved.": "",
"File name": "",
"File not found.": "",
"File removed successfully.": "",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "",
"File Upload": "",
"File uploaded successfully": "",
"File uploaded!": "",
"Filename": "",
"Files": "",
"Filter": "Salain",
@@ -1178,13 +1201,13 @@
"Knowledge": "",
"Knowledge Access": "",
"Knowledge Base": "",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "",
"Knowledge deleted successfully.": "",
"Knowledge Description": "",
"Knowledge exported successfully": "",
"Knowledge Name": "",
"Knowledge Public Sharing": "",
"Knowledge reset successfully.": "",
"Knowledge Sharing": "",
"Knowledge updated successfully": "",
"Kokoro.js (Browser)": "",
@@ -1228,6 +1251,7 @@
"Light": "Maliwanag",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "",
"Linkup API Key": "",
"List": "Listahan",
"List calendars, search, create, update, and delete calendar events": "",
"Listening...": "",
@@ -1378,6 +1402,8 @@
"New calendar": "",
"New Calendar": "",
"New Chat": "Bagong Chat",
"New directory": "",
"New Directory": "",
"New Event": "Bagong Kaganapan",
"New File": "",
"New Folder": "Bagong Folder",
@@ -1423,11 +1449,13 @@
"No HTML, CSS, or JavaScript content found.": "",
"No inference engine with management support found": "",
"No kernel": "",
"No knowledge bases accessible": "",
"No knowledge bases found.": "",
"No knowledge found": "",
"No limit": "",
"No memories to clear": "",
"No model IDs": "",
"No models accessible": "",
"No models available": "",
"No models found": "",
"No models selected": "",
@@ -1448,6 +1476,7 @@
"No Terminal connection configured.": "",
"No terminal connections configured.": "",
"No tool server connections configured.": "",
"No tools accessible": "",
"No tools found": "",
"No users were found.": "",
"No valves": "",
@@ -1487,6 +1516,7 @@
"On": "Naka-on",
"Once": "",
"OneDrive": "",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "",
"Only active when the chat input is in focus and an LLM is generating a response.": "",
"Only active when the chat input is in focus.": "",
@@ -1558,6 +1588,7 @@
"PDF document (.pdf)": "",
"PDF Extract Images (OCR)": "",
"PDF Loader Mode": "",
"pdf, docx, pptx, xlsx": "",
"pending": "",
"Pending": "Nakabinbin",
"Pending User Overlay Content": "",
@@ -1619,6 +1650,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "",
"Prevent File Creation": "",
"Preview": "",
"Preview Access": "",
"Previous 30 days": "Nakaraang 30 araw",
"Previous 7 days": "Nakaraang 7 araw",
"Previous message": "",
@@ -1696,6 +1728,8 @@
"Remove from favorites": "",
"Remove image": "",
"Remove Model": "",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._other": "",
"Rename": "Palitan ng Pangalan",
"Renamed to {{name}}": "",
"Render Markdown in Assistant Messages": "",
@@ -1714,6 +1748,7 @@
"Reset": "I-reset",
"Reset All Models": "",
"Reset Image": "",
"Reset knowledge base?": "",
"Reset Upload Directory": "",
"Reset Vector Storage/Knowledge": "",
"Reset view": "",
@@ -1782,6 +1817,7 @@
"Search Prompts": "",
"Search Result Count": "",
"Search Skills": "",
"Search skills...": "",
"Search the internet": "",
"Search the web and fetch URLs": "",
"Search Tools": "",
@@ -1980,6 +2016,8 @@
"Switch to JSON editor": "",
"Switch to visual editor": "",
"Sync": "I-sync",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "",
"Sync directory": "",
"Sync Failed": "",
@@ -2052,7 +2090,6 @@
"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.": "",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "",
"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.": "",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
"This response was generated by \"{{model}}\"": "",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "",
"This will delete": "",
@@ -2060,7 +2097,7 @@
"This will delete all models including custom models": "",
"This will delete all models including custom models and cannot be undone.": "",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "",
"Thought": "",
"Thought for {{DURATION}}": "",
@@ -2096,6 +2133,7 @@
"Toggle 1 source": "",
"Toggle details": "",
"Toggle Dictation": "",
"Toggle Mute": "",
"Toggle Sidebar": "",
"Toggle status history": "",
"Toggle whether current connection is active.": "",
@@ -2174,7 +2212,7 @@
"Upload Progress": "",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "",
"Uploaded files or images": "",
"Uploading file...": "",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "",
"URL": "",
"URL is required": "",
@@ -2194,6 +2232,7 @@
"User Groups": "Mga Grupo ng Gumagamit",
"User location successfully retrieved.": "",
"User menu": "",
"User Preview": "",
"User ratings (thumbs up/down)": "",
"User Status": "Katayuan ng Gumagamit",
"User Webhooks": "",
+48 -5
View File
@@ -9,12 +9,19 @@
"[Today at] h:mm A": "",
"[Yesterday at] h:mm A": "",
"{{ models }}": "{{ models }}",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "Nombre d'outils disponibles {{COUNT}}",
"{{COUNT}} characters": "",
"{{COUNT}} extracted lines": "",
"{{COUNT}} files": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_many": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "Nombres de lignes cachées {{COUNT}}",
"{{COUNT}} members": "",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_many": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "{{COUNT}} réponses",
"{{COUNT}} Rows": "",
"{{count}} selected_one": "",
@@ -194,6 +201,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "",
"Are you sure you want to delete this channel?": "Êtes-vous sûr de vouloir supprimer ce canal ?",
"Are you sure you want to delete this connection? This action cannot be undone.": "",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "",
"Are you sure you want to delete this message?": "Êtes-vous sûr de vouloir supprimer ce message ?",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "",
@@ -240,6 +248,7 @@
"Automations": "",
"Available list": "Liste disponible",
"Available models": "",
"Available Skills": "",
"Available Tools": "Outils disponibles",
"available users": "utilisateurs disponibles",
"available!": "disponible !",
@@ -399,13 +408,18 @@
"ComfyUI Workflow": "Flux de travaux de ComfyUI",
"ComfyUI Workflow Nodes": "Noeud du flux de travaux de ComfyUI",
"Comma separated Node Ids (e.g. 1 or 1,2)": "",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "",
"Command": "Commande",
"Comment": "Commentaire",
"Commit Message": "",
"Community Reviews": "",
"Comparing with knowledge base...": "",
"Completions": "Complétions",
"Compress Images in Channels": "",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_many": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "Demandes concurrentes",
"Config": "",
"Config imported successfully": "",
@@ -538,12 +552,14 @@
"Delete a model": "Supprimer un modèle",
"Delete All": "",
"Delete All Chats": "Supprimer toutes les conversations",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "",
"Delete automation?": "",
"Delete calendar": "",
"Delete Calendar": "",
"Delete Chat": "Supprimer la Conversation",
"Delete chat?": "Supprimer la conversation ?",
"Delete directory?": "",
"Delete Event": "",
"Delete File": "",
"Delete folder?": "Supprimer le dossier ?",
@@ -580,6 +596,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Les connexions directes permettent aux utilisateurs de se connecter à leurs propres points d'extension API compatibles OpenAI.",
"Direct Message": "",
"Direct Tool Servers": "Serveur d'outils directs",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "",
"Disable All": "",
"Disable Code Interpreter": "Désactiver l'interpréteur de code",
@@ -688,6 +709,7 @@
"Embedding Concurrent Requests": "",
"Embedding Model": "Modèle d'embedding",
"Embedding Model Engine": "Moteur de modèle d'embedding",
"Emoji": "",
"Emojis": "",
"Empty message": "",
"Enable All": "",
@@ -766,6 +788,7 @@
"Enter Kagi Search API Key": "Entrez la clé API Kagi Search",
"Enter Key Behavior": "Entrez la clé Behavior",
"Enter language codes": "Entrez les codes de langue",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "",
"Enter Mistral API Base URL": "",
"Enter Mistral API Key": "Entrez la clé APU de Mistral",
@@ -902,6 +925,7 @@
"Failed to archive chat.": "",
"Failed to attach file": "",
"Failed to clear status": "",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "Échec de la connexion au serveur d'outils OpenAPI {{URL}}",
"Failed to connect to {{URL}} terminal server": "",
"Failed to copy link": "Échec de la copie du lien",
@@ -955,14 +979,16 @@
"File content updated successfully.": "Contenu du fichier mis à jour avec succès.",
"File Context": "",
"File deleted successfully.": "",
"File Extensions": "",
"File Mode": "Mode fichier",
"File moved.": "",
"File name": "",
"File not found.": "Fichier introuvable.",
"File removed successfully.": "Fichier supprimé avec succès.",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "La taille du fichier ne doit pas dépasser {{maxSize}} Mo.",
"File Upload": "Téléversement du fichier",
"File uploaded successfully": "Fichier téléversé avec succès",
"File uploaded!": "",
"Filename": "",
"Files": "Fichiers",
"Filter": "Filtre",
@@ -1178,13 +1204,13 @@
"Knowledge": "Connaissances",
"Knowledge Access": "Accès aux connaissances",
"Knowledge Base": "",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "Connaissance créée avec succès.",
"Knowledge deleted successfully.": "Connaissance supprimée avec succès.",
"Knowledge Description": "",
"Knowledge exported successfully": "",
"Knowledge Name": "",
"Knowledge Public Sharing": "Partage public des Connaissances",
"Knowledge reset successfully.": "Connaissance réinitialisée avec succès.",
"Knowledge Sharing": "",
"Knowledge updated successfully": "Connaissance mise à jour avec succès",
"Kokoro.js (Browser)": "Kokoro.js (Navigateur)",
@@ -1228,6 +1254,7 @@
"Light": "Clair",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "",
"Linkup API Key": "",
"List": "",
"List calendars, search, create, update, and delete calendar events": "",
"Listening...": "Écoute en cours...",
@@ -1378,6 +1405,8 @@
"New calendar": "",
"New Calendar": "",
"New Chat": "Nouvelle conversation",
"New directory": "",
"New Directory": "",
"New Event": "",
"New File": "",
"New Folder": "Nouveau dossier",
@@ -1423,11 +1452,13 @@
"No HTML, CSS, or JavaScript content found.": "Aucun contenu HTML, CSS ou JavaScript trouvé.",
"No inference engine with management support found": "Aucun moteur d'inférence avec support trouvé",
"No kernel": "",
"No knowledge bases accessible": "",
"No knowledge bases found.": "",
"No knowledge found": "Aucune connaissance trouvée",
"No limit": "",
"No memories to clear": "Aucun souvenir à effacer",
"No model IDs": "Aucun ID de modèle",
"No models accessible": "",
"No models available": "",
"No models found": "Aucun modèle trouvé",
"No models selected": "Aucun modèle sélectionné",
@@ -1448,6 +1479,7 @@
"No Terminal connection configured.": "",
"No terminal connections configured.": "",
"No tool server connections configured.": "",
"No tools accessible": "",
"No tools found": "",
"No users were found.": "Aucun utilisateur trouvé.",
"No valves": "",
@@ -1487,6 +1519,7 @@
"On": "Activé",
"Once": "",
"OneDrive": "OneDrive",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "",
"Only active when the chat input is in focus and an LLM is generating a response.": "",
"Only active when the chat input is in focus.": "",
@@ -1558,6 +1591,7 @@
"PDF document (.pdf)": "Document au format PDF (.pdf)",
"PDF Extract Images (OCR)": "Extraction d'images PDF (OCR)",
"PDF Loader Mode": "",
"pdf, docx, pptx, xlsx": "",
"pending": "en attente",
"Pending": "en attente",
"Pending User Overlay Content": "Contenu de l'overlay utilisateur en attente",
@@ -1619,6 +1653,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "Le préfixe ID est utilisé pour éviter les conflits avec d'autres connexions en ajoutant un préfixe aux ID de modèle - laissez vide pour désactiver",
"Prevent File Creation": "",
"Preview": "Aperçu",
"Preview Access": "",
"Previous 30 days": "30 derniers jours",
"Previous 7 days": "7 derniers jours",
"Previous message": "Message précédent",
@@ -1696,6 +1731,9 @@
"Remove from favorites": "",
"Remove image": "Retirer l'image",
"Remove Model": "Retirer le modèle",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._many": "",
"Removing {{count}} stale files..._other": "",
"Rename": "Renommer",
"Renamed to {{name}}": "",
"Render Markdown in Assistant Messages": "",
@@ -1714,6 +1752,7 @@
"Reset": "Réinitialiser",
"Reset All Models": "Réinitialiser tous les modèles",
"Reset Image": "Réinitialiser limage",
"Reset knowledge base?": "",
"Reset Upload Directory": "Réinitialiser le répertoire de téléchargement",
"Reset Vector Storage/Knowledge": "Réinitialiser le stockage vectoriel/connaissances",
"Reset view": "Réinitialiser la vue",
@@ -1782,6 +1821,7 @@
"Search Prompts": "Rechercher des prompts",
"Search Result Count": "Nombre de résultats de recherche",
"Search Skills": "",
"Search skills...": "",
"Search the internet": "Cherche sur Internet",
"Search the web and fetch URLs": "",
"Search Tools": "Rechercher des outils",
@@ -1980,6 +2020,8 @@
"Switch to JSON editor": "",
"Switch to visual editor": "",
"Sync": "",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "",
"Sync directory": "Synchroniser le répertoire",
"Sync Failed": "",
@@ -2052,7 +2094,6 @@
"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.": "Cette option détermine combien de Token sont conservés lors du rafraîchissement du contexte. Par exemple, avec une valeur de 2, les 2 derniers Token seront conservés. Cela aide à maintenir la continuité de la conversation, mais peut limiter la capacité à traiter de nouveaux sujets.",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "Cette option active ou désactive l'utilisation de la fonctionnalité de raisonnement dans Ollama, qui permet au modèle de réfléchir avant de générer une réponse. Lorsqu'elle est activée, le modèle peut prendre un moment pour traiter le contexte de la conversation et générer une réponse plus réfléchie.",
"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.": "Cette option définit le nombre maximal de Token que le modèle peut générer dans sa réponse. Une valeur plus élevée permet des réponses plus longues, mais peut aussi générer du contenu moins pertinent.",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Cette option supprimera tous les fichiers existants dans la collection et les remplacera par les fichiers nouvellement téléchargés.",
"This response was generated by \"{{model}}\"": "Cette réponse a été générée par \"{{model}}\"",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "",
"This will delete": "Cela supprimera",
@@ -2060,7 +2101,7 @@
"This will delete all models including custom models": "Cela supprimera tous les modèles, y compris les modèles personnalisés",
"This will delete all models including custom models and cannot be undone.": "Cela supprimera tous les modèles, y compris les modèles personnalisés, et ne peut pas être annulé.",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "Cela réinitialisera la base de connaissances et synchronisera tous les fichiers. Souhaitez-vous continuer ?",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "Explication approfondie",
"Thought": "",
"Thought for {{DURATION}}": "Réflexion de {{DURATION}}",
@@ -2096,6 +2137,7 @@
"Toggle 1 source": "",
"Toggle details": "",
"Toggle Dictation": "",
"Toggle Mute": "",
"Toggle Sidebar": "",
"Toggle status history": "",
"Toggle whether current connection is active.": "Afficher/masquer si la connection courante est active",
@@ -2174,7 +2216,7 @@
"Upload Progress": "Progression de l'envoi",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "",
"Uploaded files or images": "",
"Uploading file...": "",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "",
"URL": "URL",
"URL is required": "",
@@ -2194,6 +2236,7 @@
"User Groups": "",
"User location successfully retrieved.": "L'emplacement de l'utilisateur a été récupéré avec succès.",
"User menu": "Menu utilisateur",
"User Preview": "",
"User ratings (thumbs up/down)": "",
"User Status": "",
"User Webhooks": "Webhooks utilisateur",
+48 -5
View File
@@ -9,12 +9,19 @@
"[Today at] h:mm A": "[Aujourd'hui à] H[h]mm",
"[Yesterday at] h:mm A": "[Hier à] H[h]mm",
"{{ models }}": "{{ models }}",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "{{COUNT}} outils disponibles ",
"{{COUNT}} characters": "{{COUNT}} caractères",
"{{COUNT}} extracted lines": "{{COUNT}} lignes extraites",
"{{COUNT}} files": "{{COUNT}} fichiers",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_many": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "Nombres de lignes cachées {{COUNT}}",
"{{COUNT}} members": "{{COUNT}} membres",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_many": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "{{COUNT}} réponses",
"{{COUNT}} Rows": "{{COUNT}} lignes",
"{{count}} selected_one": "",
@@ -194,6 +201,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "Êtes-vous sûr de vouloir supprimer toutes les conversations ? Cette action est irréversible.",
"Are you sure you want to delete this channel?": "Êtes-vous sûr de vouloir supprimer ce canal ?",
"Are you sure you want to delete this connection? This action cannot be undone.": "",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "",
"Are you sure you want to delete this message?": "Êtes-vous sûr de vouloir supprimer ce message ?",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "Êtes-vous sûr de vouloir supprimer cette version ? Les versions enfants seront rattachées à la version parente.",
@@ -240,6 +248,7 @@
"Automations": "",
"Available list": "Liste disponible",
"Available models": "Modèles disponibles",
"Available Skills": "",
"Available Tools": "Outils disponibles",
"available users": "utilisateurs disponibles",
"available!": "disponible !",
@@ -399,13 +408,18 @@
"ComfyUI Workflow": "Workflow ComfyUI",
"ComfyUI Workflow Nodes": "Noeuds du workflow ComfyUI",
"Comma separated Node Ids (e.g. 1 or 1,2)": "ID de nœud séparés par des virgules (Ex : 1 ou 1,2)",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "commande",
"Command": "Commande",
"Comment": "Commentaire",
"Commit Message": "Description de la modification",
"Community Reviews": "Avis de la communauté",
"Comparing with knowledge base...": "",
"Completions": "Complétions",
"Compress Images in Channels": "Compresser les images dans les canaux",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_many": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "Demandes concurrentes",
"Config": "Configuration",
"Config imported successfully": "Configuration importée avec succès",
@@ -538,12 +552,14 @@
"Delete a model": "Supprimer un modèle",
"Delete All": "Tout supprimer",
"Delete All Chats": "Supprimer toutes les conversations",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "Supprimer tout le contenu de ce dossier",
"Delete automation?": "",
"Delete calendar": "",
"Delete Calendar": "",
"Delete Chat": "Supprimer la Conversation",
"Delete chat?": "Supprimer la conversation ?",
"Delete directory?": "",
"Delete Event": "",
"Delete File": "Supprimer le fichier",
"Delete folder?": "Supprimer le dossier ?",
@@ -580,6 +596,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Les connexions directes permettent aux utilisateurs de se connecter à leurs propres points d'extension API compatibles OpenAI.",
"Direct Message": "Message direct",
"Direct Tool Servers": "Serveur d'outils directs",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "La sélection du répertoire a été annulée",
"Disable All": "Désactiver tout",
"Disable Code Interpreter": "Désactiver l'interpréteur de code",
@@ -688,6 +709,7 @@
"Embedding Concurrent Requests": "Requêtes d'embedding simultanées",
"Embedding Model": "Modèle d'embedding",
"Embedding Model Engine": "Moteur de modèle d'embedding",
"Emoji": "",
"Emojis": "",
"Empty message": "Message vide",
"Enable All": "Activer tout",
@@ -766,6 +788,7 @@
"Enter Kagi Search API Key": "Entrez la clé API Kagi",
"Enter Key Behavior": "Comportement de la touche Entrée",
"Enter language codes": "Entrez les codes de langue",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "Entrez la clé API MinerU",
"Enter Mistral API Base URL": "Entrez l'URL de base de l'API Mistral",
"Enter Mistral API Key": "Entrez la clé API Mistral",
@@ -902,6 +925,7 @@
"Failed to archive chat.": "Échec de l'archivage de la conversation.",
"Failed to attach file": "Échec de l'ajout du fichier",
"Failed to clear status": "Échec de l'effacement du statut",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "Échec de la connexion au serveur d'outils OpenAPI {{URL}}",
"Failed to connect to {{URL}} terminal server": "Échec de la connexion au serveur de terminal {{URL}}",
"Failed to copy link": "Échec de la copie du lien",
@@ -955,14 +979,16 @@
"File content updated successfully.": "Contenu du fichier mis à jour avec succès.",
"File Context": "Fichier dans le contexte",
"File deleted successfully.": "Fichier supprimé avec succès.",
"File Extensions": "",
"File Mode": "Mode fichier",
"File moved.": "",
"File name": "Nom du fichier",
"File not found.": "Fichier introuvable.",
"File removed successfully.": "Fichier supprimé avec succès.",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "La taille du fichier ne doit pas dépasser {{maxSize}} Mo.",
"File Upload": "Téléversement du fichier",
"File uploaded successfully": "Fichier téléversé avec succès",
"File uploaded!": "Fichier téléversé !",
"Filename": "Nom du fichier",
"Files": "Fichiers",
"Filter": "Filtre",
@@ -1178,13 +1204,13 @@
"Knowledge": "Connaissances",
"Knowledge Access": "Accès aux connaissances",
"Knowledge Base": "Base de connaissances",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "Connaissance créée avec succès.",
"Knowledge deleted successfully.": "Connaissance supprimée avec succès.",
"Knowledge Description": "Description des connaissances",
"Knowledge exported successfully": "Connaissance exportée avec succès",
"Knowledge Name": "Nom de la connaissance",
"Knowledge Public Sharing": "Partage public des Connaissances",
"Knowledge reset successfully.": "Connaissance réinitialisée avec succès.",
"Knowledge Sharing": "Partage des connaissances",
"Knowledge updated successfully": "Connaissance mise à jour avec succès",
"Kokoro.js (Browser)": "Kokoro.js (Navigateur)",
@@ -1228,6 +1254,7 @@
"Light": "Clair",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "Limite les requêtes de recherche simultanées. 0 = illimité (par défaut). Définir à 1 pour une exécution séquentielle (recommandé pour les API avec des limites de débit strictes comme Brave gratuit).",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "Limite le nombre de requêtes d'embedding simultanées. Définir à 0 pour illimité.",
"Linkup API Key": "",
"List": "Liste",
"List calendars, search, create, update, and delete calendar events": "",
"Listening...": "Écoute en cours...",
@@ -1378,6 +1405,8 @@
"New calendar": "",
"New Calendar": "",
"New Chat": "Nouvelle conversation",
"New directory": "",
"New Directory": "",
"New Event": "",
"New File": "Nouveau fichier",
"New Folder": "Nouveau dossier",
@@ -1423,11 +1452,13 @@
"No HTML, CSS, or JavaScript content found.": "Aucun contenu HTML, CSS ou JavaScript trouvé.",
"No inference engine with management support found": "Aucun moteur d'inférence avec support trouvé",
"No kernel": "Aucun noyau",
"No knowledge bases accessible": "",
"No knowledge bases found.": "Aucune base de connaissances trouvée.",
"No knowledge found": "Aucune connaissance trouvée",
"No limit": "",
"No memories to clear": "Aucun souvenir à effacer",
"No model IDs": "Aucun ID de modèle",
"No models accessible": "",
"No models available": "Aucun modèle disponible",
"No models found": "Aucun modèle trouvé",
"No models selected": "Aucun modèle sélectionné",
@@ -1448,6 +1479,7 @@
"No Terminal connection configured.": "Aucune connexion à un terminal configurée.",
"No terminal connections configured.": "Aucune connexion à un terminal configurée.",
"No tool server connections configured.": "Aucune connexion à un serveur d'outils configurée.",
"No tools accessible": "",
"No tools found": "Aucun outil trouvé",
"No users were found.": "Aucun utilisateur trouvé.",
"No valves": "Aucune vanne trouvée",
@@ -1487,6 +1519,7 @@
"On": "Activé",
"Once": "",
"OneDrive": "OneDrive",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "Uniquement lorsque le paramètre \"Coller un texte volumineux comme fichier\" est activé.",
"Only active when the chat input is in focus and an LLM is generating a response.": "Uniquement lorsque la zone de saisie de la conversation est active et qu'un LLM génère une réponse.",
"Only active when the chat input is in focus.": "Uniquement lorsque la zone de saisie de la conversation est active.",
@@ -1558,6 +1591,7 @@
"PDF document (.pdf)": "Document au format PDF (.pdf)",
"PDF Extract Images (OCR)": "Extraction d'images PDF (OCR)",
"PDF Loader Mode": "Mode de chargement des PDF",
"pdf, docx, pptx, xlsx": "",
"pending": "en attente",
"Pending": "en attente",
"Pending User Overlay Content": "Contenu de l'overlay utilisateur en attente",
@@ -1619,6 +1653,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "Le préfixe ID est utilisé pour éviter les conflits avec d'autres connexions en ajoutant un préfixe aux ID de modèle - laissez vide pour désactiver",
"Prevent File Creation": "Empêcher la création de fichier",
"Preview": "Aperçu",
"Preview Access": "",
"Previous 30 days": "30 derniers jours",
"Previous 7 days": "7 derniers jours",
"Previous message": "Message précédent",
@@ -1696,6 +1731,9 @@
"Remove from favorites": "Retirer des favoris",
"Remove image": "Retirer l'image",
"Remove Model": "Retirer le modèle",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._many": "",
"Removing {{count}} stale files..._other": "",
"Rename": "Renommer",
"Renamed to {{name}}": "",
"Render Markdown in Assistant Messages": "",
@@ -1714,6 +1752,7 @@
"Reset": "Réinitialiser",
"Reset All Models": "Réinitialiser tous les modèles",
"Reset Image": "Réinitialiser limage",
"Reset knowledge base?": "",
"Reset Upload Directory": "Réinitialiser le répertoire de téléchargement",
"Reset Vector Storage/Knowledge": "Réinitialiser le stockage vectoriel/connaissances",
"Reset view": "Réinitialiser la vue",
@@ -1782,6 +1821,7 @@
"Search Prompts": "Rechercher des prompts",
"Search Result Count": "Nombre de résultats de recherche",
"Search Skills": "Rechercher des skills",
"Search skills...": "",
"Search the internet": "Cherche sur Internet",
"Search the web and fetch URLs": "Rechercher sur le web et récupérer le contenu de sites web à partir d'une URL",
"Search Tools": "Rechercher des outils",
@@ -1980,6 +2020,8 @@
"Switch to JSON editor": "",
"Switch to visual editor": "",
"Sync": "Synchroniser",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "Synchronisation terminée !",
"Sync directory": "Synchroniser le répertoire",
"Sync Failed": "Échec de la synchronisation",
@@ -2052,7 +2094,6 @@
"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.": "Cette option détermine combien de Token sont conservés lors du rafraîchissement du contexte. Par exemple, avec une valeur de 2, les 2 derniers Token seront conservés. Cela aide à maintenir la continuité de la conversation, mais peut limiter la capacité à traiter de nouveaux sujets.",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "Cette option active ou désactive l'utilisation de la fonctionnalité de raisonnement dans Ollama, qui permet au modèle de réfléchir avant de générer une réponse. Lorsqu'elle est activée, le modèle peut prendre un moment pour traiter le contexte de la conversation et générer une réponse plus réfléchie.",
"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.": "Cette option définit le nombre maximal de tokens que le modèle peut générer dans sa réponse. Une valeur plus élevée permet des réponses plus longues, mais peut aussi générer du contenu moins pertinent.",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Cette option supprimera tous les fichiers existants dans la collection et les remplacera par les fichiers nouvellement téléchargés.",
"This response was generated by \"{{model}}\"": "Cette réponse a été générée par \"{{model}}\"",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "",
"This will delete": "Cela supprimera",
@@ -2060,7 +2101,7 @@
"This will delete all models including custom models": "Cela supprimera tous les modèles, y compris les modèles personnalisés",
"This will delete all models including custom models and cannot be undone.": "Cela supprimera tous les modèles, y compris les modèles personnalisés, et ne peut pas être annulé.",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "Cela réinitialisera la base de connaissances et synchronisera tous les fichiers. Souhaitez-vous continuer ?",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "Explication approfondie",
"Thought": "",
"Thought for {{DURATION}}": "Réflexion de {{DURATION}}",
@@ -2096,6 +2137,7 @@
"Toggle 1 source": "Afficher/masquer 1 source",
"Toggle details": "",
"Toggle Dictation": "Activer/Désactiver la dictée",
"Toggle Mute": "",
"Toggle Sidebar": "Afficher/Masquer la barre latérale",
"Toggle status history": "Afficher/masquer l'historique des statuts",
"Toggle whether current connection is active.": "Afficher/masquer si la connection courante est active",
@@ -2174,7 +2216,7 @@
"Upload Progress": "Progression de l'envoi",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "Progression du téléchargement\u00a0: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)",
"Uploaded files or images": "Les fichiers ou images téléversés",
"Uploading file...": "Téléversement du fichier en cours...",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "Téléversement en cours...",
"URL": "URL",
"URL is required": "L'URL est requise",
@@ -2194,6 +2236,7 @@
"User Groups": "Groupes d'utilisateurs",
"User location successfully retrieved.": "Emplacement de l'utilisateur récupéré avec succès.",
"User menu": "Menu utilisateur",
"User Preview": "",
"User ratings (thumbs up/down)": "Évaluations des utilisateurs (pouces vers le haut/bas)",
"User Status": "Statut utilisateur",
"User Webhooks": "Webhooks utilisateur",
+44 -5
View File
@@ -9,12 +9,17 @@
"[Today at] h:mm A": "",
"[Yesterday at] h:mm A": "",
"{{ models }}": "{{ models }}",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "",
"{{COUNT}} characters": "",
"{{COUNT}} extracted lines": "",
"{{COUNT}} files": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "",
"{{COUNT}} members": "",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "{{COUNT}} Respostas",
"{{COUNT}} Rows": "",
"{{count}} selected_one": "",
@@ -193,6 +198,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "",
"Are you sure you want to delete this channel?": "¿Seguro que queres eliminar este canal?",
"Are you sure you want to delete this connection? This action cannot be undone.": "",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "",
"Are you sure you want to delete this message?": "¿Seguro que queres eliminar este mensaxe? ",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "",
@@ -239,6 +245,7 @@
"Automations": "",
"Available list": "Lista dispoñible",
"Available models": "",
"Available Skills": "",
"Available Tools": "",
"available users": "usuarios dispoñibles",
"available!": "¡dispoñible!",
@@ -398,13 +405,17 @@
"ComfyUI Workflow": "Fluxo de traballo de ComfyUI",
"ComfyUI Workflow Nodes": "Nodos para ComfyUI Workflow",
"Comma separated Node Ids (e.g. 1 or 1,2)": "",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "",
"Command": "Comando",
"Comment": "",
"Commit Message": "",
"Community Reviews": "",
"Comparing with knowledge base...": "",
"Completions": "Respostas autoxeradas",
"Compress Images in Channels": "",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "Solicitudes simultáneas",
"Config": "",
"Config imported successfully": "",
@@ -537,12 +548,14 @@
"Delete a model": "Borra un modelo",
"Delete All": "",
"Delete All Chats": "Eliminar todos os chats",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "",
"Delete automation?": "",
"Delete calendar": "",
"Delete Calendar": "",
"Delete Chat": "Borrar Chat",
"Delete chat?": "Borrar o chat?",
"Delete directory?": "",
"Delete Event": "",
"Delete File": "",
"Delete folder?": "¿Eliminar carpeta?",
@@ -579,6 +592,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "Conexións directas permiten aos usuarios conectar cos seus propios puntos finais de API compatibles con OpenAI.",
"Direct Message": "",
"Direct Tool Servers": "",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "",
"Disable All": "",
"Disable Code Interpreter": "",
@@ -687,6 +705,7 @@
"Embedding Concurrent Requests": "",
"Embedding Model": "Modelo de Embedding",
"Embedding Model Engine": "Motor de Modelo de Embedding",
"Emoji": "",
"Emojis": "",
"Empty message": "",
"Enable All": "",
@@ -765,6 +784,7 @@
"Enter Kagi Search API Key": "Ingrese a chave API de Kagi Search",
"Enter Key Behavior": "Ingrese o comportamento da chave",
"Enter language codes": "Ingrese códigos de idioma",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "",
"Enter Mistral API Base URL": "",
"Enter Mistral API Key": "",
@@ -901,6 +921,7 @@
"Failed to archive chat.": "",
"Failed to attach file": "",
"Failed to clear status": "",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to connect to {{URL}} terminal server": "",
"Failed to copy link": "",
@@ -954,14 +975,16 @@
"File content updated successfully.": "Contido do Arquivo actualizado correctamente.",
"File Context": "",
"File deleted successfully.": "",
"File Extensions": "",
"File Mode": "Modo de Arquivo",
"File moved.": "",
"File name": "",
"File not found.": "Arquivo non encontrado.",
"File removed successfully.": "Arquivo eliminado correctamente.",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "Tamaño do Arquivo non debe exceder {{maxSize}} MB.",
"File Upload": "",
"File uploaded successfully": "Arquivo subido correctamente",
"File uploaded!": "",
"Filename": "",
"Files": "Arquivos",
"Filter": "",
@@ -1177,13 +1200,13 @@
"Knowledge": "coñecemento",
"Knowledge Access": "Acceso al coñecemento",
"Knowledge Base": "",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "coñecemento creado exitosamente.",
"Knowledge deleted successfully.": "coñecemento eliminado exitosamente.",
"Knowledge Description": "",
"Knowledge exported successfully": "",
"Knowledge Name": "",
"Knowledge Public Sharing": "",
"Knowledge reset successfully.": "coñecemento restablecido exitosamente.",
"Knowledge Sharing": "",
"Knowledge updated successfully": "coñecemento actualizado exitosamente.",
"Kokoro.js (Browser)": "Kokoro .js (Navegador)",
@@ -1227,6 +1250,7 @@
"Light": "Claro",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "",
"Linkup API Key": "",
"List": "",
"List calendars, search, create, update, and delete calendar events": "",
"Listening...": "Escoitando...",
@@ -1377,6 +1401,8 @@
"New calendar": "",
"New Calendar": "",
"New Chat": "Novo Chat",
"New directory": "",
"New Directory": "",
"New Event": "",
"New File": "",
"New Folder": "Nova carpeta",
@@ -1422,11 +1448,13 @@
"No HTML, CSS, or JavaScript content found.": "No se encontró contido HTML, CSS, o JavaScript.",
"No inference engine with management support found": "No se encontró un motor de inferencia con soporte de gestión",
"No kernel": "",
"No knowledge bases accessible": "",
"No knowledge bases found.": "",
"No knowledge found": "No se encontrou ningún coñecemento",
"No limit": "",
"No memories to clear": "Non hay memorias que limpar",
"No model IDs": "Non ten IDs de modelos",
"No models accessible": "",
"No models available": "",
"No models found": "No se encontraron modelos",
"No models selected": "No se seleccionaron modelos",
@@ -1447,6 +1475,7 @@
"No Terminal connection configured.": "",
"No terminal connections configured.": "",
"No tool server connections configured.": "",
"No tools accessible": "",
"No tools found": "",
"No users were found.": "No se encontraron usuarios.",
"No valves": "",
@@ -1486,6 +1515,7 @@
"On": "Activado",
"Once": "",
"OneDrive": "OneDrive",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "",
"Only active when the chat input is in focus and an LLM is generating a response.": "",
"Only active when the chat input is in focus.": "",
@@ -1557,6 +1587,7 @@
"PDF document (.pdf)": "Documento PDF (.pdf)",
"PDF Extract Images (OCR)": "Extraer imaxes de PDF (OCR)",
"PDF Loader Mode": "",
"pdf, docx, pptx, xlsx": "",
"pending": "pendente",
"Pending": "",
"Pending User Overlay Content": "",
@@ -1618,6 +1649,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "O ID de prefixo se utiliza para evitar conflictos con outras conexiones añadiendo un prefijo a os IDs de os modelos - deje vacío para deshabilitar",
"Prevent File Creation": "",
"Preview": "",
"Preview Access": "",
"Previous 30 days": "Últimos 30 días",
"Previous 7 days": "Últimos 7 días",
"Previous message": "",
@@ -1695,6 +1727,8 @@
"Remove from favorites": "",
"Remove image": "",
"Remove Model": "Eliminar modelo",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._other": "",
"Rename": "Renombrar",
"Renamed to {{name}}": "",
"Render Markdown in Assistant Messages": "",
@@ -1713,6 +1747,7 @@
"Reset": "Reiniciar",
"Reset All Models": "Reiniciar todos os modelos",
"Reset Image": "Restablecer imaxe",
"Reset knowledge base?": "",
"Reset Upload Directory": "Reiniciar Directorio de carga",
"Reset Vector Storage/Knowledge": "Reiniciar almacenamiento de vectores/coñecemento",
"Reset view": "Reiniciar vista",
@@ -1780,6 +1815,7 @@
"Search Prompts": "Buscar Prompts",
"Search Result Count": "Recuento de resultados de búsqueda",
"Search Skills": "",
"Search skills...": "",
"Search the internet": "Buscar en internet",
"Search the web and fetch URLs": "",
"Search Tools": "Búsqueda de ferramentas",
@@ -1977,6 +2013,8 @@
"Switch to JSON editor": "",
"Switch to visual editor": "",
"Sync": "",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "",
"Sync directory": "Sincroniza directorio",
"Sync Failed": "",
@@ -2049,7 +2087,6 @@
"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.": "",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "",
"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.": "",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Esta opción eliminará todos os arquivos existentes na colección y os reemplazará con novos arquivos subidos.",
"This response was generated by \"{{model}}\"": "Esta resposta fue generada por \"{{model}}\"",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "",
"This will delete": "Esto eliminará",
@@ -2057,7 +2094,7 @@
"This will delete all models including custom models": "Esto eliminará todos os modelos, incluidos os modelos personalizados",
"This will delete all models including custom models and cannot be undone.": "Esto eliminará todos os modelos, incluidos os modelos personalizados y no se puede deshacer.",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "Esto reseteará la base de coñecementos y sincronizará todos os arquivos. ¿Desea continuar?",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "Explicación exhaustiva",
"Thought": "",
"Thought for {{DURATION}}": "Pensamiento para {{DURATION}}",
@@ -2093,6 +2130,7 @@
"Toggle 1 source": "",
"Toggle details": "",
"Toggle Dictation": "",
"Toggle Mute": "",
"Toggle Sidebar": "",
"Toggle status history": "",
"Toggle whether current connection is active.": "",
@@ -2171,7 +2209,7 @@
"Upload Progress": "Progreso de carga",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "",
"Uploaded files or images": "",
"Uploading file...": "",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "",
"URL": "URL",
"URL is required": "",
@@ -2191,6 +2229,7 @@
"User Groups": "",
"User location successfully retrieved.": "Localización do usuario recuperada con éxito.",
"User menu": "",
"User Preview": "",
"User ratings (thumbs up/down)": "",
"User Status": "",
"User Webhooks": "",
+48 -5
View File
@@ -9,12 +9,19 @@
"[Today at] h:mm A": "",
"[Yesterday at] h:mm A": "",
"{{ models }}": "{{ מודלים }}",
"{{COUNT}} Available Skills": "",
"{{COUNT}} Available Tools": "",
"{{COUNT}} characters": "",
"{{COUNT}} extracted lines": "",
"{{COUNT}} files": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_one": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_two": "",
"{{count}} files selected. Only new and modified files will be uploaded. Deleted files will be removed. The folder structure will be mirrored. Continue?_other": "",
"{{COUNT}} hidden lines": "",
"{{COUNT}} members": "",
"{{count}} of {{total}} accessible_one": "",
"{{count}} of {{total}} accessible_two": "",
"{{count}} of {{total}} accessible_other": "",
"{{COUNT}} Replies": "",
"{{COUNT}} Rows": "",
"{{count}} selected_one": "",
@@ -194,6 +201,7 @@
"Are you sure you want to delete all chats? This action cannot be undone.": "",
"Are you sure you want to delete this channel?": "",
"Are you sure you want to delete this connection? This action cannot be undone.": "",
"Are you sure you want to delete this directory?": "",
"Are you sure you want to delete this memory? This action cannot be undone.": "",
"Are you sure you want to delete this message?": "",
"Are you sure you want to delete this version? Child versions will be relinked to this version's parent.": "",
@@ -240,6 +248,7 @@
"Automations": "",
"Available list": "",
"Available models": "",
"Available Skills": "",
"Available Tools": "כלים זמינים",
"available users": "משתמשים זמינים",
"available!": "זמין!",
@@ -399,13 +408,18 @@
"ComfyUI Workflow": "",
"ComfyUI Workflow Nodes": "",
"Comma separated Node Ids (e.g. 1 or 1,2)": "",
"Comma-separated list of file extensions MinerU will handle (e.g. pdf, docx, pptx, xlsx)": "",
"command": "",
"Command": "פקודה",
"Comment": "",
"Commit Message": "",
"Community Reviews": "",
"Comparing with knowledge base...": "",
"Completions": "",
"Compress Images in Channels": "",
"Computing checksums ({{count}} files)_one": "",
"Computing checksums ({{count}} files)_two": "",
"Computing checksums ({{count}} files)_other": "",
"Concurrent Requests": "בקשות בו-זמניות",
"Config": "",
"Config imported successfully": "",
@@ -538,12 +552,14 @@
"Delete a model": "מחק מודל",
"Delete All": "",
"Delete All Chats": "מחק את כל הצ'אטים",
"Delete all contents inside this directory": "",
"Delete all contents inside this folder": "",
"Delete automation?": "",
"Delete calendar": "",
"Delete Calendar": "",
"Delete Chat": "מחק צ'אט",
"Delete chat?": "",
"Delete directory?": "",
"Delete Event": "",
"Delete File": "",
"Delete folder?": "",
@@ -580,6 +596,11 @@
"Direct Connections allow users to connect to their own OpenAI compatible API endpoints.": "",
"Direct Message": "",
"Direct Tool Servers": "",
"Directory created.": "",
"Directory deleted.": "",
"Directory moved.": "",
"Directory name": "",
"Directory renamed.": "",
"Directory selection was cancelled": "",
"Disable All": "",
"Disable Code Interpreter": "",
@@ -688,6 +709,7 @@
"Embedding Concurrent Requests": "",
"Embedding Model": "מודל הטמעה",
"Embedding Model Engine": "מנוע מודל הטמעה",
"Emoji": "",
"Emojis": "",
"Empty message": "",
"Enable All": "",
@@ -766,6 +788,7 @@
"Enter Kagi Search API Key": "",
"Enter Key Behavior": "",
"Enter language codes": "הזן קודי שפה",
"Enter Linkup API Key": "",
"Enter MinerU API Key": "",
"Enter Mistral API Base URL": "",
"Enter Mistral API Key": "",
@@ -902,6 +925,7 @@
"Failed to archive chat.": "",
"Failed to attach file": "",
"Failed to clear status": "",
"Failed to compare files.": "",
"Failed to connect to {{URL}} OpenAPI tool server": "",
"Failed to connect to {{URL}} terminal server": "",
"Failed to copy link": "",
@@ -955,14 +979,16 @@
"File content updated successfully.": "",
"File Context": "",
"File deleted successfully.": "",
"File Extensions": "",
"File Mode": "מצב קובץ",
"File moved.": "",
"File name": "",
"File not found.": "הקובץ לא נמצא.",
"File removed successfully.": "",
"File renamed.": "",
"File size should not exceed {{maxSize}} MB.": "",
"File Upload": "",
"File uploaded successfully": "",
"File uploaded!": "",
"Filename": "",
"Files": "",
"Filter": "",
@@ -1178,13 +1204,13 @@
"Knowledge": "",
"Knowledge Access": "",
"Knowledge Base": "",
"Knowledge base has been reset": "",
"Knowledge created successfully.": "",
"Knowledge deleted successfully.": "",
"Knowledge Description": "",
"Knowledge exported successfully": "",
"Knowledge Name": "",
"Knowledge Public Sharing": "",
"Knowledge reset successfully.": "",
"Knowledge Sharing": "",
"Knowledge updated successfully": "",
"Kokoro.js (Browser)": "",
@@ -1228,6 +1254,7 @@
"Light": "בהיר",
"Limit concurrent search queries. 0 = unlimited (default). Set to 1 for sequential execution (recommended for APIs with strict rate limits like Brave free tier).": "",
"Limits the number of concurrent embedding requests. Set to 0 for unlimited.": "",
"Linkup API Key": "",
"List": "",
"List calendars, search, create, update, and delete calendar events": "",
"Listening...": "",
@@ -1378,6 +1405,8 @@
"New calendar": "",
"New Calendar": "",
"New Chat": "צ'אט חדש",
"New directory": "",
"New Directory": "",
"New Event": "",
"New File": "",
"New Folder": "תיקייה חדשה",
@@ -1423,11 +1452,13 @@
"No HTML, CSS, or JavaScript content found.": "",
"No inference engine with management support found": "",
"No kernel": "",
"No knowledge bases accessible": "",
"No knowledge bases found.": "",
"No knowledge found": "",
"No limit": "",
"No memories to clear": "",
"No model IDs": "",
"No models accessible": "",
"No models available": "",
"No models found": "",
"No models selected": "",
@@ -1448,6 +1479,7 @@
"No Terminal connection configured.": "",
"No terminal connections configured.": "",
"No tool server connections configured.": "",
"No tools accessible": "",
"No tools found": "",
"No users were found.": "לא נמצאו יוזרים",
"No valves": "",
@@ -1487,6 +1519,7 @@
"On": "פועל",
"Once": "",
"OneDrive": "",
"Only active during Voice Mode.": "",
"Only active when \"Paste Large Text as File\" setting is toggled on.": "",
"Only active when the chat input is in focus and an LLM is generating a response.": "",
"Only active when the chat input is in focus.": "",
@@ -1558,6 +1591,7 @@
"PDF document (.pdf)": "מסמך PDF (.pdf)",
"PDF Extract Images (OCR)": "חילוץ תמונות מ-PDF (OCR)",
"PDF Loader Mode": "",
"pdf, docx, pptx, xlsx": "",
"pending": "ממתין",
"Pending": "",
"Pending User Overlay Content": "",
@@ -1619,6 +1653,7 @@
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "",
"Prevent File Creation": "",
"Preview": "",
"Preview Access": "",
"Previous 30 days": "30 הימים הקודמים",
"Previous 7 days": "7 הימים הקודמים",
"Previous message": "",
@@ -1696,6 +1731,9 @@
"Remove from favorites": "",
"Remove image": "",
"Remove Model": "הסר מודל",
"Removing {{count}} stale files..._one": "",
"Removing {{count}} stale files..._two": "",
"Removing {{count}} stale files..._other": "",
"Rename": "שנה שם",
"Renamed to {{name}}": "",
"Render Markdown in Assistant Messages": "",
@@ -1714,6 +1752,7 @@
"Reset": "",
"Reset All Models": "",
"Reset Image": "איפוס תמונה",
"Reset knowledge base?": "",
"Reset Upload Directory": "",
"Reset Vector Storage/Knowledge": "",
"Reset view": "",
@@ -1782,6 +1821,7 @@
"Search Prompts": "חפש פקודות",
"Search Result Count": "ספירת תוצאות חיפוש",
"Search Skills": "",
"Search skills...": "",
"Search the internet": "",
"Search the web and fetch URLs": "",
"Search Tools": "",
@@ -1980,6 +2020,8 @@
"Switch to JSON editor": "",
"Switch to visual editor": "",
"Sync": "",
"Sync a local directory with this knowledge base. Only new and modified files will be uploaded. The directory structure will be mirrored.": "",
"Sync complete: {{added}} added, {{modified}} modified, {{deleted}} deleted, {{unmodified}} unmodified": "",
"Sync Complete!": "",
"Sync directory": "",
"Sync Failed": "",
@@ -2052,7 +2094,6 @@
"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.": "",
"This option enables or disables the use of the reasoning feature in Ollama, which allows the model to think before generating a response. When enabled, the model can take a moment to process the conversation context and generate a more thoughtful response.": "",
"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.": "",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "",
"This response was generated by \"{{model}}\"": "",
"This template contains multiple context placeholders ([context] or {{CONTEXT}}). Context will be injected at each occurrence.": "",
"This will delete": "",
@@ -2060,7 +2101,7 @@
"This will delete all models including custom models": "",
"This will delete all models including custom models and cannot be undone.": "",
"This will permanently delete the calendar \"{{name}}\" and all its events. This action cannot be undone.": "",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "",
"This will remove all files and directories from this knowledge base. This action cannot be undone.": "",
"Thorough explanation": "תיאור מפורט",
"Thought": "",
"Thought for {{DURATION}}": "",
@@ -2096,6 +2137,7 @@
"Toggle 1 source": "",
"Toggle details": "",
"Toggle Dictation": "",
"Toggle Mute": "",
"Toggle Sidebar": "",
"Toggle status history": "",
"Toggle whether current connection is active.": "",
@@ -2174,7 +2216,7 @@
"Upload Progress": "תקדמות העלאה",
"Upload Progress: {{uploadedFiles}}/{{totalFiles}} ({{percentage}}%)": "",
"Uploaded files or images": "",
"Uploading file...": "",
"Uploading {{current}}/{{total}}: {{file}}": "",
"Uploading...": "",
"URL": "",
"URL is required": "",
@@ -2194,6 +2236,7 @@
"User Groups": "",
"User location successfully retrieved.": "",
"User menu": "",
"User Preview": "",
"User ratings (thumbs up/down)": "",
"User Status": "",
"User Webhooks": "",

Some files were not shown because too many files have changed in this diff Show More