Compare commits

...

81 Commits

Author SHA1 Message Date
Timothy Jaeryang Baek c13bcfdfc9 Merge pull request #7202 from open-webui/dev
Create and publish Docker images with specific build args / build-main-image (linux/amd64) (push) Waiting to run
Create and publish Docker images with specific build args / build-main-image (linux/arm64) (push) Waiting to run
Create and publish Docker images with specific build args / build-cuda-image (linux/amd64) (push) Waiting to run
Create and publish Docker images with specific build args / build-cuda-image (linux/arm64) (push) Waiting to run
Create and publish Docker images with specific build args / build-ollama-image (linux/amd64) (push) Waiting to run
Create and publish Docker images with specific build args / build-ollama-image (linux/arm64) (push) Waiting to run
Create and publish Docker images with specific build args / merge-main-images (push) Blocked by required conditions
Create and publish Docker images with specific build args / merge-cuda-images (push) Blocked by required conditions
Create and publish Docker images with specific build args / merge-ollama-images (push) Blocked by required conditions
chore: version bump
2024-11-21 22:47:45 -08:00
Timothy Jaeryang Baek 9aac02824d chore: version bump 2024-11-21 22:47:29 -08:00
Timothy Jaeryang Baek edd224d542 Merge pull request #7180 from open-webui/dev
0.4.3
2024-11-21 22:46:34 -08:00
Timothy Jaeryang Baek 5c49740aa5 doc: changelog 2024-11-21 22:45:49 -08:00
Timothy Jaeryang Baek 20f31b5bc8 refac 2024-11-21 22:20:57 -08:00
Timothy Jaeryang Baek b23600b49d refac 2024-11-21 22:15:04 -08:00
Timothy Jaeryang Baek 7b9b0f23fe refac 2024-11-21 22:12:40 -08:00
Timothy Jaeryang Baek 2e7af7bdbf fix 2024-11-21 22:03:51 -08:00
Timothy Jaeryang Baek 12c8257c92 refac 2024-11-21 21:32:19 -08:00
Timothy Jaeryang Baek 9a2dd5b126 refac: optimisation 2024-11-21 21:04:35 -08:00
Timothy Jaeryang Baek 4b83a83576 fix: openai connection config 2024-11-21 20:49:40 -08:00
Timothy Jaeryang Baek e18a43aec8 fix: styling 2024-11-21 20:39:00 -08:00
Timothy Jaeryang Baek ea28747baa fix: knowledge base reset 2024-11-21 20:29:54 -08:00
Timothy Jaeryang Baek 3816e3c2ef refac: styling 2024-11-21 20:20:46 -08:00
Timothy Jaeryang Baek 9bc0de2c6a refac 2024-11-21 20:03:30 -08:00
Timothy Jaeryang Baek 81386e9b04 refac: citations -> sources 2024-11-21 19:46:09 -08:00
Timothy Jaeryang Baek 7062e637e8 refac: inline citations 2024-11-21 18:26:38 -08:00
Timothy Jaeryang Baek 714ed248fb refac: styling 2024-11-21 18:05:45 -08:00
Timothy Jaeryang Baek 7b675a1488 refac: styling 2024-11-21 18:02:33 -08:00
Timothy Jaeryang Baek 386c976e9a enh: inline citations 2024-11-21 17:58:29 -08:00
Timothy Jaeryang Baek 5be7cbfdf5 Merge pull request #7182 from michaelpoluektov/fix/tools-metadata
fix: Fix tools metadata
2024-11-21 16:32:08 -08:00
Timothy Jaeryang Baek 0217c044c9 Merge pull request #7195 from michaelpoluektov/remove-unused-router
refactor: Remove unused router
2024-11-21 16:30:22 -08:00
Michael Poluektov 26efc76d40 remove unused router 2024-11-22 00:15:11 +00:00
Michael Poluektov 8abf5d57c1 remove unused schemas file 2024-11-21 23:49:58 +00:00
Timothy Jaeryang Baek 948b65e43f refac 2024-11-21 12:16:50 -08:00
Michael Poluektov e1a85c99ab format 2024-11-21 17:52:19 +00:00
Michael Poluektov 6783c98539 Merge branch 'dev' of https://github.com/open-webui/open-webui into fix/tools-metadata 2024-11-21 17:46:44 +00:00
Michael Poluektov c03bfd141e fix optional args not present 2024-11-21 17:41:35 +00:00
Michael Poluektov 70838148e7 fix tools metadata 2024-11-21 17:19:56 +00:00
Timothy Jaeryang Baek d587206929 refac: add suffix field to ollama generate form 2024-11-21 08:12:19 -08:00
Timothy Jaeryang Baek 1c0327ed7f Merge pull request #7163 from igorbrai/main
feat: Add Mojeek as web search provider
2024-11-21 08:10:14 -08:00
Timothy Jaeryang Baek b0162dfee0 refac 2024-11-21 08:10:05 -08:00
Timothy Jaeryang Baek 1fcde2272b Merge pull request #7162 from morgan55555/dev
LDAP auth fixes: do not store LDAP password, use default user role on first auth, allow ldap only form.
2024-11-21 08:08:47 -08:00
Timothy Jaeryang Baek 48c03ef551 Merge pull request #7147 from aindriu80/main
i18n: Updated Irish translations
2024-11-21 08:06:33 -08:00
Igor Brai d16b09bee5 Merge branch 'open-webui:main' into main 2024-11-21 15:25:41 +02:00
alexey_rechkalov b9e637ee2b Now ENABLE_LOGIN_FORM=False disabling only email form.
LDAP form will be showed instead.
Also added "name" property to inputs for Chrome autocompletion.
2024-11-21 18:11:12 +05:00
alexey_rechkalov b1237cf389 Fixed security vulnerability: now LDAP password hashes are not stored, same as trusted header auth.
LDAP users role now getting DEFAULT_USER_ROLE, not "pending".
2024-11-21 18:09:29 +05:00
Michael Poluektov 3dfea834ca Merge branch 'dev' of https://github.com/open-webui/open-webui into dev 2024-11-21 13:02:39 +00:00
Aindriú Mac Giolla Eoin c03cae811d Updated Irish translations 2024-11-21 10:15:37 +00:00
Timothy Jaeryang Baek 6088acf36d refac: styling 2024-11-20 23:31:46 -08:00
Timothy Jaeryang Baek c5cd1e4403 refac: rich text input 2024-11-20 23:14:06 -08:00
Timothy Jaeryang Baek aca06f92e8 enh: rich text input 2024-11-20 22:56:26 -08:00
Timothy Jaeryang Baek e30c5e628c refac: rich text input 2024-11-20 22:46:51 -08:00
Timothy Jaeryang Baek 6f4bc9864c Merge pull request #7119 from open-webui/dev
Create and publish Docker images with specific build args / build-main-image (linux/amd64) (push) Waiting to run
Create and publish Docker images with specific build args / build-main-image (linux/arm64) (push) Waiting to run
Create and publish Docker images with specific build args / build-cuda-image (linux/amd64) (push) Waiting to run
Create and publish Docker images with specific build args / build-cuda-image (linux/arm64) (push) Waiting to run
Create and publish Docker images with specific build args / build-ollama-image (linux/amd64) (push) Waiting to run
Create and publish Docker images with specific build args / build-ollama-image (linux/arm64) (push) Waiting to run
Create and publish Docker images with specific build args / merge-main-images (push) Blocked by required conditions
Create and publish Docker images with specific build args / merge-cuda-images (push) Blocked by required conditions
Create and publish Docker images with specific build args / merge-ollama-images (push) Blocked by required conditions
doc
2024-11-20 12:24:35 -08:00
Timothy Jaeryang Baek 9b03b1a453 doc: readme 2024-11-20 12:24:07 -08:00
Timothy Jaeryang Baek 99c5cf1a00 doc: wording 2024-11-20 12:23:31 -08:00
Timothy Jaeryang Baek 639bea64d8 Merge pull request #7097 from open-webui/dev
0.4.2
2024-11-20 12:15:14 -08:00
Timothy Jaeryang Baek 02d02b0518 doc: changelog 2024-11-20 12:11:38 -08:00
Timothy Jaeryang Baek bc57acb3a6 Merge pull request #7113 from Xelaph/patch-1
**i18n** Update Dutch translation.json
2024-11-20 10:03:04 -08:00
Timothy Jaeryang Baek 2b890cf747 fix: knowledge files issue 2024-11-20 10:02:14 -08:00
Timothy Jaeryang Baek 4156b62811 refac 2024-11-20 10:02:07 -08:00
Timothy Jaeryang Baek c0055afdb3 refac: youtube loader 2024-11-20 10:01:58 -08:00
Alex 882a070cc9 Update translation.json
Added all new translations and changed a lot to better represent Dutch language rules
2024-11-20 18:47:01 +01:00
Timothy Jaeryang Baek d68aa5c708 chore: requirements 2024-11-20 06:53:11 -08:00
Timothy Jaeryang Baek 2450953080 refac 2024-11-20 06:34:52 -08:00
Timothy Jaeryang Baek db1a71c753 fix: usage capability in model editor 2024-11-20 06:24:09 -08:00
Timothy Jaeryang Baek 822a43c53d fix: arena model access control 2024-11-20 06:21:08 -08:00
Timothy Jaeryang Baek d5c65e36c9 fix: prefix issue 2024-11-20 06:12:20 -08:00
Timothy Jaeryang Baek bd1dae2c66 Merge branch 'dev' of https://github.com/open-webui/open-webui into dev 2024-11-20 06:09:53 -08:00
Timothy Jaeryang Baek 0dd1d6de2a fix: import 2024-11-20 06:09:48 -08:00
Timothy Jaeryang Baek 505bee066e Merge pull request #7069 from KarlLee830/translate
i18n: Update Chinese translation
2024-11-20 06:07:25 -08:00
Timothy Jaeryang Baek 54cabc9776 Merge pull request #7072 from antpyykk-kone/feature/fix-pipeline-middleware-http-exception-handling
fix: handle uncaught HTTP exceptions in PipelineMiddleware
2024-11-20 06:07:15 -08:00
Antti Pyykkönen 4f6ae8239d fix: handle http exceptions 2024-11-20 09:25:50 +02:00
KarlLee830 3531cf827a i18n: Update Chinese translation 2024-11-20 12:39:22 +08:00
Timothy Jaeryang Baek 02e94c8264 Merge pull request #7057 from open-webui/dev
Create and publish Docker images with specific build args / build-main-image (linux/amd64) (push) Waiting to run
Create and publish Docker images with specific build args / build-main-image (linux/arm64) (push) Waiting to run
Create and publish Docker images with specific build args / build-cuda-image (linux/amd64) (push) Waiting to run
Create and publish Docker images with specific build args / build-cuda-image (linux/arm64) (push) Waiting to run
Create and publish Docker images with specific build args / build-ollama-image (linux/amd64) (push) Waiting to run
Create and publish Docker images with specific build args / build-ollama-image (linux/arm64) (push) Waiting to run
Create and publish Docker images with specific build args / merge-main-images (push) Blocked by required conditions
Create and publish Docker images with specific build args / merge-cuda-images (push) Blocked by required conditions
Create and publish Docker images with specific build args / merge-ollama-images (push) Blocked by required conditions
0.4.1
2024-11-19 20:17:05 -08:00
Timothy Jaeryang Baek 31f00bbc69 doc: changelog 2024-11-19 20:16:34 -08:00
Timothy Jaeryang Baek cb19dbf72b chore: format 2024-11-19 20:15:37 -08:00
Timothy Jaeryang Baek e54879aeb1 enh: detailed 1-10 rating 2024-11-19 20:12:22 -08:00
Timothy Jaeryang Baek 7966367107 refac: models api 2024-11-19 18:45:26 -08:00
Timothy Jaeryang Baek 7c5b845d16 refac: add citations to outlet/actions form
Co-Authored-By: Alex Morgan <alxmrg55@gmail.com>
2024-11-19 18:26:01 -08:00
Timothy Jaeryang Baek cbcd14cdbf doc: changelog 2024-11-19 18:22:45 -08:00
Timothy Jaeryang Baek 0e0a9b4b27 Merge pull request #7061 from zhoubinxin/dev
ci: fix huggingface deploy errors and track .jpg file types
2024-11-19 18:22:35 -08:00
Timothy Jaeryang Baek 70c6d3bf9f fix 2024-11-19 18:21:55 -08:00
Timothy Jaeryang Baek 206a4877c7 fix: api key creation 2024-11-19 18:17:38 -08:00
bx 2c2c2ea9e1 fix(workflow): fix huggingface deploy errors and track .jpg file types 2024-11-20 10:15:40 +08:00
Timothy Jaeryang Baek 7f7b1b18cd doc: changelog 2024-11-19 17:27:34 -08:00
Timothy Jaeryang Baek 00e41790bf enh: show tool description on hover 2024-11-19 17:10:43 -08:00
Timothy Jaeryang Baek 9d9a60afec refac 2024-11-19 16:50:45 -08:00
Timothy Jaeryang Baek eefb2926d8 Merge pull request #7056 from open-webui/dev
fix: deleted user handling
2024-11-19 16:48:30 -08:00
Timothy Jaeryang Baek 0c43c1edf6 fix: deleted user handling 2024-11-19 16:47:35 -08:00
Igor Brai b7d730e244 add mojeek as websearch option 2024-10-29 16:45:38 +02:00
101 changed files with 2999 additions and 1739 deletions
@@ -28,6 +28,8 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
lfs: true
- name: Remove git history
run: rm -rf .git
@@ -52,7 +54,9 @@ jobs:
- name: Set up Git and push to Space
run: |
git init --initial-branch=main
git lfs install
git lfs track "*.ttf"
git lfs track "*.jpg"
rm demo.gif
git add .
git commit -m "GitHub deploy: ${{ github.sha }}"
+39
View File
@@ -5,6 +5,45 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.4.3] - 2024-11-21
### Added
- **📚 Inline Citations for RAG Results**: Get seamless inline citations for Retrieval-Augmented Generation (RAG) responses using the default RAG prompt. Note: This feature only supports newly uploaded files, improving traceability and providing source clarity.
- **🎨 Better Rich Text Input Support**: Enjoy smoother and more reliable rich text formatting for chats, enhancing communication quality.
- **⚡ Faster Model Retrieval**: Implemented caching optimizations for faster model loading, providing a noticeable speed boost across workflows. Further improvements are on the way!
### Fixed
- **🔗 Pipelines Feature Restored**: Resolved a critical issue that previously prevented Pipelines from functioning, ensuring seamless workflows.
- **✏️ Missing Suffix Field in Ollama Form**: Added the missing "suffix" field to the Ollama generate form, enhancing customization options.
### Changed
- **🗂️ Renamed "Citations" to "Sources"**: Improved clarity and consistency by renaming the "citations" field to "sources" in messages.
## [0.4.2] - 2024-11-20
### Fixed
- **📁 Knowledge Files Visibility Issue**: Resolved the bug preventing individual files in knowledge collections from displaying when referenced with '#'.
- **🔗 OpenAI Endpoint Prefix**: Fixed the issue where certain OpenAI connections that deviate from the official API spec werent working correctly with prefixes.
- **⚔️ Arena Model Access Control**: Corrected an issue where arena model access control settings were not being saved.
- **🔧 Usage Capability Selector**: Fixed the broken usage capabilities selector in the model editor.
## [0.4.1] - 2024-11-19
### Added
- **📊 Enhanced Feedback System**: Introduced a detailed 1-10 rating scale for feedback alongside thumbs up/down, preparing for more precise model fine-tuning and improving feedback quality.
- **️ Tool Descriptions on Hover**: Easily access tool descriptions by hovering over the message input, providing a smoother workflow with more context when utilizing tools.
### Fixed
- **🗑️ Graceful Handling of Deleted Users**: Resolved an issue where deleted users caused workspace items (models, knowledge, prompts, tools) to fail, ensuring reliable workspace loading.
- **🔑 API Key Creation**: Fixed an issue preventing users from creating new API keys, restoring secure and seamless API management.
- **🔗 HTTPS Proxy Fix**: Corrected HTTPS proxy issues affecting the '/api/v1/models/' endpoint, ensuring smoother, uninterrupted model management.
## [0.4.0] - 2024-11-19
### Added
+3 -1
View File
@@ -21,7 +21,7 @@ Open WebUI is an [extensible](https://github.com/open-webui/pipelines), feature-
- 🤝 **Ollama/OpenAI API Integration**: Effortlessly integrate OpenAI-compatible APIs for versatile conversations alongside Ollama models. Customize the OpenAI API URL to link with **LMStudio, GroqCloud, Mistral, OpenRouter, and more**.
- 🧩 **Pipelines, Open WebUI Plugin Support**: Seamlessly integrate custom logic and Python libraries into Open WebUI using [Pipelines Plugin Framework](https://github.com/open-webui/pipelines). Launch your Pipelines instance, set the OpenAI URL to the Pipelines URL, and explore endless possibilities. [Examples](https://github.com/open-webui/pipelines/tree/main/examples) include **Function Calling**, User **Rate Limiting** to control access, **Usage Monitoring** with tools like Langfuse, **Live Translation with LibreTranslate** for multilingual support, **Toxic Message Filtering** and much more.
- 🛡️ **Granular Permissions and User Groups**: By allowing administrators to create detailed user roles and permissions, we ensure a secure user environment. This granularity not only enhances security but also allows for customized user experiences, fostering a sense of ownership and responsibility amongst users.
- 📱 **Responsive Design**: Enjoy a seamless experience across Desktop PC, Laptop, and Mobile devices.
@@ -49,6 +49,8 @@ Open WebUI is an [extensible](https://github.com/open-webui/pipelines), feature-
- 🌐🌍 **Multilingual Support**: Experience Open WebUI in your preferred language with our internationalization (i18n) support. Join us in expanding our supported languages! We're actively seeking contributors!
- 🧩 **Pipelines, Open WebUI Plugin Support**: Seamlessly integrate custom logic and Python libraries into Open WebUI using [Pipelines Plugin Framework](https://github.com/open-webui/pipelines). Launch your Pipelines instance, set the OpenAI URL to the Pipelines URL, and explore endless possibilities. [Examples](https://github.com/open-webui/pipelines/tree/main/examples) include **Function Calling**, User **Rate Limiting** to control access, **Usage Monitoring** with tools like Langfuse, **Live Translation with LibreTranslate** for multilingual support, **Toxic Message Filtering** and much more.
- 🌟 **Continuous Updates**: We are committed to improving Open WebUI with regular updates, fixes, and new features.
Want to learn more about Open WebUI's features? Check out our [Open WebUI documentation](https://docs.openwebui.com/features) for a comprehensive overview!
+4 -2
View File
@@ -9,6 +9,8 @@ from typing import Optional, Union
from urllib.parse import urlparse
import aiohttp
from aiocache import cached
import requests
from open_webui.apps.webui.models.models import Models
from open_webui.config import (
@@ -256,6 +258,7 @@ def merge_models_lists(model_lists):
return list(merged_models.values())
@cached(ttl=3)
async def get_all_models():
log.info("get_all_models()")
if app.state.config.ENABLE_OLLAMA_API:
@@ -295,8 +298,6 @@ async def get_all_models():
for model in response.get("models", []):
model["model"] = f"{prefix_id}.{model['model']}"
print(responses)
models = {
"models": merge_models_lists(
map(
@@ -837,6 +838,7 @@ async def generate_ollama_batch_embeddings(
class GenerateCompletionForm(BaseModel):
model: str
prompt: str
suffix: Optional[str] = None
images: Optional[list[str]] = None
format: Optional[str] = None
options: Optional[dict] = None
+9 -1
View File
@@ -6,7 +6,10 @@ from pathlib import Path
from typing import Literal, Optional, overload
import aiohttp
from aiocache import cached
import requests
from open_webui.apps.webui.models.models import Models
from open_webui.config import (
CACHE_DIR,
@@ -302,6 +305,8 @@ async def get_all_models_responses() -> list:
}
tasks.append(asyncio.ensure_future(asyncio.sleep(0, model_list)))
else:
tasks.append(asyncio.ensure_future(asyncio.sleep(0, None)))
responses = await asyncio.gather(*tasks)
@@ -313,7 +318,9 @@ async def get_all_models_responses() -> list:
prefix_id = api_config.get("prefix_id", None)
if prefix_id:
for model in response["data"]:
for model in (
response if isinstance(response, list) else response.get("data", [])
):
model["id"] = f"{prefix_id}.{model['id']}"
log.debug(f"get_all_models:responses() {responses}")
@@ -321,6 +328,7 @@ async def get_all_models_responses() -> list:
return responses
@cached(ttl=3)
async def get_all_models() -> dict[str, list]:
log.info("get_all_models()")
@@ -0,0 +1,98 @@
from typing import Any, Dict, Generator, List, Optional, Sequence, Union
from urllib.parse import parse_qs, urlparse
from langchain_core.documents import Document
ALLOWED_SCHEMES = {"http", "https"}
ALLOWED_NETLOCS = {
"youtu.be",
"m.youtube.com",
"youtube.com",
"www.youtube.com",
"www.youtube-nocookie.com",
"vid.plus",
}
def _parse_video_id(url: str) -> Optional[str]:
"""Parse a YouTube URL and return the video ID if valid, otherwise None."""
parsed_url = urlparse(url)
if parsed_url.scheme not in ALLOWED_SCHEMES:
return None
if parsed_url.netloc not in ALLOWED_NETLOCS:
return None
path = parsed_url.path
if path.endswith("/watch"):
query = parsed_url.query
parsed_query = parse_qs(query)
if "v" in parsed_query:
ids = parsed_query["v"]
video_id = ids if isinstance(ids, str) else ids[0]
else:
return None
else:
path = parsed_url.path.lstrip("/")
video_id = path.split("/")[-1]
if len(video_id) != 11: # Video IDs are 11 characters long
return None
return video_id
class YoutubeLoader:
"""Load `YouTube` video transcripts."""
def __init__(
self,
video_id: str,
language: Union[str, Sequence[str]] = "en",
):
"""Initialize with YouTube video ID."""
_video_id = _parse_video_id(video_id)
self.video_id = _video_id if _video_id is not None else video_id
self._metadata = {"source": video_id}
self.language = language
if isinstance(language, str):
self.language = [language]
else:
self.language = language
def load(self) -> List[Document]:
"""Load YouTube transcripts into `Document` objects."""
try:
from youtube_transcript_api import (
NoTranscriptFound,
TranscriptsDisabled,
YouTubeTranscriptApi,
)
except ImportError:
raise ImportError(
'Could not import "youtube_transcript_api" Python package. '
"Please install it with `pip install youtube-transcript-api`."
)
try:
transcript_list = YouTubeTranscriptApi.list_transcripts(self.video_id)
except Exception as e:
print(e)
return []
try:
transcript = transcript_list.find_transcript(self.language)
except NoTranscriptFound:
transcript = transcript_list.find_transcript(["en"])
transcript_pieces: List[Dict[str, Any]] = transcript.fetch()
transcript = " ".join(
map(
lambda transcript_piece: transcript_piece["text"].strip(" "),
transcript_pieces,
)
)
return [Document(page_content=transcript, metadata=self._metadata)]
+49 -19
View File
@@ -23,11 +23,13 @@ from open_webui.apps.retrieval.vector.connector import VECTOR_DB_CLIENT
# Document loaders
from open_webui.apps.retrieval.loaders.main import Loader
from open_webui.apps.retrieval.loaders.youtube import YoutubeLoader
# Web search engines
from open_webui.apps.retrieval.web.main import SearchResult
from open_webui.apps.retrieval.web.utils import get_web_loader
from open_webui.apps.retrieval.web.brave import search_brave
from open_webui.apps.retrieval.web.mojeek import search_mojeek
from open_webui.apps.retrieval.web.duckduckgo import search_duckduckgo
from open_webui.apps.retrieval.web.google_pse import search_google_pse
from open_webui.apps.retrieval.web.jina_search import search_jina
@@ -52,6 +54,7 @@ from open_webui.apps.retrieval.utils import (
from open_webui.apps.webui.models.files import Files
from open_webui.config import (
BRAVE_SEARCH_API_KEY,
MOJEEK_SEARCH_API_KEY,
TIKTOKEN_ENCODING_NAME,
RAG_TEXT_SPLITTER,
CHUNK_OVERLAP,
@@ -120,9 +123,6 @@ from open_webui.utils.misc import (
from open_webui.utils.utils import get_admin_user, get_verified_user
from langchain.text_splitter import RecursiveCharacterTextSplitter, TokenTextSplitter
from langchain_community.document_loaders import (
YoutubeLoader,
)
from langchain_core.documents import Document
@@ -182,6 +182,7 @@ app.state.config.SEARXNG_QUERY_URL = SEARXNG_QUERY_URL
app.state.config.GOOGLE_PSE_API_KEY = GOOGLE_PSE_API_KEY
app.state.config.GOOGLE_PSE_ENGINE_ID = GOOGLE_PSE_ENGINE_ID
app.state.config.BRAVE_SEARCH_API_KEY = BRAVE_SEARCH_API_KEY
app.state.config.MOJEEK_SEARCH_API_KEY = MOJEEK_SEARCH_API_KEY
app.state.config.SERPSTACK_API_KEY = SERPSTACK_API_KEY
app.state.config.SERPSTACK_HTTPS = SERPSTACK_HTTPS
app.state.config.SERPER_API_KEY = SERPER_API_KEY
@@ -480,6 +481,7 @@ async def get_rag_config(user=Depends(get_admin_user)):
"google_pse_api_key": app.state.config.GOOGLE_PSE_API_KEY,
"google_pse_engine_id": app.state.config.GOOGLE_PSE_ENGINE_ID,
"brave_search_api_key": app.state.config.BRAVE_SEARCH_API_KEY,
"mojeek_search_api_key": app.state.config.MOJEEK_SEARCH_API_KEY,
"serpstack_api_key": app.state.config.SERPSTACK_API_KEY,
"serpstack_https": app.state.config.SERPSTACK_HTTPS,
"serper_api_key": app.state.config.SERPER_API_KEY,
@@ -525,6 +527,7 @@ class WebSearchConfig(BaseModel):
google_pse_api_key: Optional[str] = None
google_pse_engine_id: Optional[str] = None
brave_search_api_key: Optional[str] = None
mojeek_search_api_key: Optional[str] = None
serpstack_api_key: Optional[str] = None
serpstack_https: Optional[bool] = None
serper_api_key: Optional[str] = None
@@ -595,6 +598,9 @@ async def update_rag_config(form_data: ConfigUpdateForm, user=Depends(get_admin_
app.state.config.BRAVE_SEARCH_API_KEY = (
form_data.web.search.brave_search_api_key
)
app.state.config.MOJEEK_SEARCH_API_KEY = (
form_data.web.search.mojeek_search_api_key
)
app.state.config.SERPSTACK_API_KEY = form_data.web.search.serpstack_api_key
app.state.config.SERPSTACK_HTTPS = form_data.web.search.serpstack_https
app.state.config.SERPER_API_KEY = form_data.web.search.serper_api_key
@@ -645,6 +651,7 @@ async def update_rag_config(form_data: ConfigUpdateForm, user=Depends(get_admin_
"google_pse_api_key": app.state.config.GOOGLE_PSE_API_KEY,
"google_pse_engine_id": app.state.config.GOOGLE_PSE_ENGINE_ID,
"brave_search_api_key": app.state.config.BRAVE_SEARCH_API_KEY,
"mojeek_search_api_key": app.state.config.MOJEEK_SEARCH_API_KEY,
"serpstack_api_key": app.state.config.SERPSTACK_API_KEY,
"serpstack_https": app.state.config.SERPSTACK_HTTPS,
"serper_api_key": app.state.config.SERPER_API_KEY,
@@ -886,19 +893,17 @@ def process_file(
# Update the content in the file
# Usage: /files/{file_id}/data/content/update
VECTOR_DB_CLIENT.delete(
collection_name=f"file-{file.id}",
filter={"file_id": file.id},
)
VECTOR_DB_CLIENT.delete_collection(collection_name=f"file-{file.id}")
docs = [
Document(
page_content=form_data.content,
metadata={
"name": file.meta.get("name", file.filename),
**file.meta,
"name": file.filename,
"created_by": file.user_id,
"file_id": file.id,
**file.meta,
"source": file.filename,
},
)
]
@@ -925,10 +930,11 @@ def process_file(
Document(
page_content=file.data.get("content", ""),
metadata={
"name": file.meta.get("name", file.filename),
**file.meta,
"name": file.filename,
"created_by": file.user_id,
"file_id": file.id,
**file.meta,
"source": file.filename,
},
)
]
@@ -948,15 +954,30 @@ def process_file(
docs = loader.load(
file.filename, file.meta.get("content_type"), file_path
)
docs = [
Document(
page_content=doc.page_content,
metadata={
**doc.metadata,
"name": file.filename,
"created_by": file.user_id,
"file_id": file.id,
"source": file.filename,
},
)
for doc in docs
]
else:
docs = [
Document(
page_content=file.data.get("content", ""),
metadata={
**file.meta,
"name": file.filename,
"created_by": file.user_id,
"file_id": file.id,
**file.meta,
"source": file.filename,
},
)
]
@@ -977,7 +998,7 @@ def process_file(
collection_name=collection_name,
metadata={
"file_id": file.id,
"name": file.meta.get("name", file.filename),
"name": file.filename,
"hash": hash,
},
add=(True if form_data.collection_name else False),
@@ -994,7 +1015,7 @@ def process_file(
return {
"status": True,
"collection_name": collection_name,
"filename": file.meta.get("name", file.filename),
"filename": file.filename,
"content": text_content,
}
except Exception as e:
@@ -1059,12 +1080,10 @@ def process_youtube_video(form_data: ProcessUrlForm, user=Depends(get_verified_u
if not collection_name:
collection_name = calculate_sha256_string(form_data.url)[:63]
loader = YoutubeLoader.from_youtube_url(
form_data.url,
add_video_info=False,
language=app.state.config.YOUTUBE_LOADER_LANGUAGE,
translation=app.state.YOUTUBE_LOADER_TRANSLATION,
loader = YoutubeLoader(
form_data.url, language=app.state.config.YOUTUBE_LOADER_LANGUAGE
)
docs = loader.load()
content = " ".join([doc.page_content for doc in docs])
log.debug(f"text_content: {content}")
@@ -1135,6 +1154,7 @@ def search_web(engine: str, query: str) -> list[SearchResult]:
- SEARXNG_QUERY_URL
- GOOGLE_PSE_API_KEY + GOOGLE_PSE_ENGINE_ID
- BRAVE_SEARCH_API_KEY
- MOJEEK_SEARCH_API_KEY
- SERPSTACK_API_KEY
- SERPER_API_KEY
- SERPLY_API_KEY
@@ -1181,6 +1201,16 @@ def search_web(engine: str, query: str) -> list[SearchResult]:
)
else:
raise Exception("No BRAVE_SEARCH_API_KEY found in environment variables")
elif engine == "mojeek":
if app.state.config.MOJEEK_SEARCH_API_KEY:
return search_mojeek(
app.state.config.MOJEEK_SEARCH_API_KEY,
query,
app.state.config.RAG_WEB_SEARCH_RESULT_COUNT,
app.state.config.RAG_WEB_SEARCH_DOMAIN_FILTER_LIST,
)
else:
raise Exception("No MOJEEK_SEARCH_API_KEY found in environment variables")
elif engine == "serpstack":
if app.state.config.SERPSTACK_API_KEY:
return search_serpstack(
+7 -27
View File
@@ -307,7 +307,7 @@ def get_embedding_function(
return lambda query: generate_multiple(query, func)
def get_rag_context(
def get_sources_from_files(
files,
queries,
embedding_function,
@@ -387,43 +387,24 @@ def get_rag_context(
del file["data"]
relevant_contexts.append({**context, "file": file})
contexts = []
citations = []
sources = []
for context in relevant_contexts:
try:
if "documents" in context:
file_names = list(
set(
[
metadata["name"]
for metadata in context["metadatas"][0]
if metadata is not None and "name" in metadata
]
)
)
contexts.append(
((", ".join(file_names) + ":\n\n") if file_names else "")
+ "\n\n".join(
[text for text in context["documents"][0] if text is not None]
)
)
if "metadatas" in context:
citation = {
source = {
"source": context["file"],
"document": context["documents"][0],
"metadata": context["metadatas"][0],
}
if "distances" in context and context["distances"]:
citation["distances"] = context["distances"][0]
citations.append(citation)
source["distances"] = context["distances"][0]
sources.append(source)
except Exception as e:
log.exception(e)
print("contexts", contexts)
print("citations", citations)
return contexts, citations
return sources
def get_model_path(model: str, update_model: bool = False):
@@ -502,7 +483,6 @@ def generate_ollama_batch_embeddings(
r.raise_for_status()
data = r.json()
print(data)
if "embeddings" in data:
return data["embeddings"]
else:
@@ -1,7 +1,7 @@
from opensearchpy import OpenSearch
from typing import Optional
from open_webui.apps.rag.vector.main import VectorItem, SearchResult, GetResult
from open_webui.apps.retrieval.vector.main import VectorItem, SearchResult, GetResult
from open_webui.config import (
OPENSEARCH_URI,
OPENSEARCH_SSL,
@@ -0,0 +1,40 @@
import logging
from typing import Optional
import requests
from open_webui.apps.retrieval.web.main import SearchResult, get_filtered_results
from open_webui.env import SRC_LOG_LEVELS
log = logging.getLogger(__name__)
log.setLevel(SRC_LOG_LEVELS["RAG"])
def search_mojeek(
api_key: str, query: str, count: int, filter_list: Optional[list[str]] = None
) -> list[SearchResult]:
"""Search using Mojeek's Search API and return the results as a list of SearchResult objects.
Args:
api_key (str): A Mojeek Search API key
query (str): The query to search for
"""
url = "https://api.mojeek.com/search"
headers = {
"Accept": "application/json",
}
params = {"q": query, "api_key": api_key, "fmt": "json", "t": count}
response = requests.get(url, headers=headers, params=params)
response.raise_for_status()
json_response = response.json()
results = json_response.get("response", {}).get("results", [])
print(results)
if filter_list:
results = get_filtered_results(results, filter_list)
return [
SearchResult(
link=result["url"], title=result.get("title"), snippet=result.get("desc")
)
for result in results
]
@@ -128,17 +128,20 @@ class KnowledgeTable:
def get_knowledge_bases(self) -> list[KnowledgeUserModel]:
with get_db() as db:
return [
KnowledgeUserModel.model_validate(
{
**KnowledgeModel.model_validate(knowledge).model_dump(),
"user": Users.get_user_by_id(knowledge.user_id).model_dump(),
}
knowledge_bases = []
for knowledge in (
db.query(Knowledge).order_by(Knowledge.updated_at.desc()).all()
):
user = Users.get_user_by_id(knowledge.user_id)
knowledge_bases.append(
KnowledgeUserModel.model_validate(
{
**KnowledgeModel.model_validate(knowledge).model_dump(),
"user": user.model_dump() if user else None,
}
)
)
for knowledge in db.query(Knowledge)
.order_by(Knowledge.updated_at.desc())
.all()
]
return knowledge_bases
def get_knowledge_bases_by_user_id(
self, user_id: str, permission: str = "write"
+11 -8
View File
@@ -175,15 +175,18 @@ class ModelsTable:
def get_models(self) -> list[ModelUserResponse]:
with get_db() as db:
return [
ModelUserResponse.model_validate(
{
**ModelModel.model_validate(model).model_dump(),
"user": Users.get_user_by_id(model.user_id).model_dump(),
}
models = []
for model in db.query(Model).filter(Model.base_model_id != None).all():
user = Users.get_user_by_id(model.user_id)
models.append(
ModelUserResponse.model_validate(
{
**ModelModel.model_validate(model).model_dump(),
"user": user.model_dump() if user else None,
}
)
)
for model in db.query(Model).filter(Model.base_model_id != None).all()
]
return models
def get_base_models(self) -> list[ModelModel]:
with get_db() as db:
@@ -103,15 +103,20 @@ class PromptsTable:
def get_prompts(self) -> list[PromptUserResponse]:
with get_db() as db:
return [
PromptUserResponse.model_validate(
{
**PromptModel.model_validate(prompt).model_dump(),
"user": Users.get_user_by_id(prompt.user_id).model_dump(),
}
prompts = []
for prompt in db.query(Prompt).order_by(Prompt.timestamp.desc()).all():
user = Users.get_user_by_id(prompt.user_id)
prompts.append(
PromptUserResponse.model_validate(
{
**PromptModel.model_validate(prompt).model_dump(),
"user": user.model_dump() if user else None,
}
)
)
for prompt in db.query(Prompt).all()
]
return prompts
def get_prompts_by_user_id(
self, user_id: str, permission: str = "write"
+11 -8
View File
@@ -140,15 +140,18 @@ class ToolsTable:
def get_tools(self) -> list[ToolUserResponse]:
with get_db() as db:
return [
ToolUserResponse.model_validate(
{
**ToolModel.model_validate(tool).model_dump(),
"user": Users.get_user_by_id(tool.user_id).model_dump(),
}
tools = []
for tool in db.query(Tool).order_by(Tool.updated_at.desc()).all():
user = Users.get_user_by_id(tool.user_id)
tools.append(
ToolUserResponse.model_validate(
{
**ToolModel.model_validate(tool).model_dump(),
"user": user.model_dump() if user else None,
}
)
)
for tool in db.query(Tool).order_by(Tool.updated_at.desc()).all()
]
return tools
def get_tools_by_user_id(
self, user_id: str, permission: str = "write"
+16 -6
View File
@@ -238,10 +238,20 @@ async def ldap_auth(request: Request, response: Response, form_data: LdapForm):
user = Users.get_user_by_email(mail)
if not user:
try:
hashed = get_password_hash(form_data.password)
user = Auths.insert_new_auth(mail, hashed, cn)
role = (
"admin"
if Users.get_num_users() == 0
else request.app.state.config.DEFAULT_USER_ROLE
)
user = Auths.insert_new_auth(
mail,
str(uuid.uuid4()),
cn,
None,
role,
)
if not user:
raise HTTPException(
@@ -253,7 +263,7 @@ async def ldap_auth(request: Request, response: Response, form_data: LdapForm):
except Exception as err:
raise HTTPException(500, detail=ERROR_MESSAGES.DEFAULT(err))
user = Auths.authenticate_user(mail, password=str(form_data.password))
user = Auths.authenticate_user_by_trusted_header(mail)
if user:
token = create_token(
@@ -738,8 +748,8 @@ async def update_ldap_config(
# create api key
@router.post("/api_key", response_model=ApiKey)
async def create_api_key(request: Request, user=Depends(get_current_user)):
if not request.app.config.state.ENABLE_API_KEY:
async def generate_api_key(request: Request, user=Depends(get_current_user)):
if not request.app.state.config.ENABLE_API_KEY:
raise HTTPException(
status.HTTP_403_FORBIDDEN,
detail=ERROR_MESSAGES.API_KEY_CREATION_NOT_ALLOWED,
@@ -1,155 +0,0 @@
import json
from typing import Optional
from open_webui.apps.webui.models.documents import (
DocumentForm,
DocumentResponse,
Documents,
DocumentUpdateForm,
)
from open_webui.constants import ERROR_MESSAGES
from fastapi import APIRouter, Depends, HTTPException, status
from pydantic import BaseModel
from open_webui.utils.utils import get_admin_user, get_verified_user
router = APIRouter()
############################
# GetDocuments
############################
@router.get("/", response_model=list[DocumentResponse])
async def get_documents(user=Depends(get_verified_user)):
docs = [
DocumentResponse(
**{
**doc.model_dump(),
"content": json.loads(doc.content if doc.content else "{}"),
}
)
for doc in Documents.get_docs()
]
return docs
############################
# CreateNewDoc
############################
@router.post("/create", response_model=Optional[DocumentResponse])
async def create_new_doc(form_data: DocumentForm, user=Depends(get_admin_user)):
doc = Documents.get_doc_by_name(form_data.name)
if doc is None:
doc = Documents.insert_new_doc(user.id, form_data)
if doc:
return DocumentResponse(
**{
**doc.model_dump(),
"content": json.loads(doc.content if doc.content else "{}"),
}
)
else:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail=ERROR_MESSAGES.FILE_EXISTS,
)
else:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail=ERROR_MESSAGES.NAME_TAG_TAKEN,
)
############################
# GetDocByName
############################
@router.get("/doc", response_model=Optional[DocumentResponse])
async def get_doc_by_name(name: str, user=Depends(get_verified_user)):
doc = Documents.get_doc_by_name(name)
if doc:
return DocumentResponse(
**{
**doc.model_dump(),
"content": json.loads(doc.content if doc.content else "{}"),
}
)
else:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail=ERROR_MESSAGES.NOT_FOUND,
)
############################
# TagDocByName
############################
class TagItem(BaseModel):
name: str
class TagDocumentForm(BaseModel):
name: str
tags: list[dict]
@router.post("/doc/tags", response_model=Optional[DocumentResponse])
async def tag_doc_by_name(form_data: TagDocumentForm, user=Depends(get_verified_user)):
doc = Documents.update_doc_content_by_name(form_data.name, {"tags": form_data.tags})
if doc:
return DocumentResponse(
**{
**doc.model_dump(),
"content": json.loads(doc.content if doc.content else "{}"),
}
)
else:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail=ERROR_MESSAGES.NOT_FOUND,
)
############################
# UpdateDocByName
############################
@router.post("/doc/update", response_model=Optional[DocumentResponse])
async def update_doc_by_name(
name: str,
form_data: DocumentUpdateForm,
user=Depends(get_admin_user),
):
doc = Documents.update_doc_by_name(name, form_data)
if doc:
return DocumentResponse(
**{
**doc.model_dump(),
"content": json.loads(doc.content if doc.content else "{}"),
}
)
else:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail=ERROR_MESSAGES.NAME_TAG_TAKEN,
)
############################
# DeleteDocByName
############################
@router.delete("/doc/delete", response_model=bool)
async def delete_doc_by_name(name: str, user=Depends(get_admin_user)):
result = Documents.delete_doc_by_name(name)
return result
@@ -56,7 +56,7 @@ def upload_file(file: UploadFile = File(...), user=Depends(get_verified_user)):
FileForm(
**{
"id": id,
"filename": filename,
"filename": name,
"path": file_path,
"meta": {
"name": name,
@@ -43,6 +43,7 @@ async def get_knowledge(user=Depends(get_verified_user)):
knowledge_bases = Knowledges.get_knowledge_bases_by_user_id(user.id, "read")
# Get files for each knowledge base
knowledge_with_files = []
for knowledge_base in knowledge_bases:
files = []
if knowledge_base.data:
@@ -70,12 +71,14 @@ async def get_knowledge(user=Depends(get_verified_user)):
files = Files.get_file_metadatas_by_ids(file_ids)
knowledge_base = KnowledgeResponse(
**knowledge_base.model_dump(),
files=files,
knowledge_with_files.append(
KnowledgeUserResponse(
**knowledge_base.model_dump(),
files=files,
)
)
return knowledge_bases
return knowledge_with_files
@router.get("/list", response_model=list[KnowledgeUserResponse])
@@ -88,6 +91,7 @@ async def get_knowledge_list(user=Depends(get_verified_user)):
knowledge_bases = Knowledges.get_knowledge_bases_by_user_id(user.id, "write")
# Get files for each knowledge base
knowledge_with_files = []
for knowledge_base in knowledge_bases:
files = []
if knowledge_base.data:
@@ -115,12 +119,13 @@ async def get_knowledge_list(user=Depends(get_verified_user)):
files = Files.get_file_metadatas_by_ids(file_ids)
knowledge_base = KnowledgeResponse(
**knowledge_base.model_dump(),
files=files,
knowledge_with_files.append(
KnowledgeUserResponse(
**knowledge_base.model_dump(),
files=files,
)
)
return knowledge_bases
return knowledge_with_files
############################
@@ -83,7 +83,8 @@ async def create_new_model(
###########################
@router.get("/id/{id}", response_model=Optional[ModelResponse])
# Note: We're not using the typical url path param here, but instead using a query parameter to allow '/' in the id
@router.get("/model", response_model=Optional[ModelResponse])
async def get_model_by_id(id: str, user=Depends(get_verified_user)):
model = Models.get_model_by_id(id)
if model:
@@ -105,7 +106,7 @@ async def get_model_by_id(id: str, user=Depends(get_verified_user)):
############################
@router.post("/id/{id}/toggle", response_model=Optional[ModelResponse])
@router.post("/model/toggle", response_model=Optional[ModelResponse])
async def toggle_model_by_id(id: str, user=Depends(get_verified_user)):
model = Models.get_model_by_id(id)
if model:
@@ -140,7 +141,7 @@ async def toggle_model_by_id(id: str, user=Depends(get_verified_user)):
############################
@router.post("/id/{id}/update", response_model=Optional[ModelModel])
@router.post("/model/update", response_model=Optional[ModelModel])
async def update_model_by_id(
id: str,
form_data: ModelForm,
@@ -163,7 +164,7 @@ async def update_model_by_id(
############################
@router.delete("/id/{id}/delete", response_model=bool)
@router.delete("/model/delete", response_model=bool)
async def delete_model_by_id(id: str, user=Depends(get_verified_user)):
model = Models.get_model_by_id(id)
if not model:
+26 -30
View File
@@ -1,4 +1,3 @@
import os
from pathlib import Path
from typing import Optional
@@ -10,7 +9,7 @@ from open_webui.apps.webui.models.tools import (
Tools,
)
from open_webui.apps.webui.utils import load_tools_module_by_id, replace_imports
from open_webui.config import CACHE_DIR, DATA_DIR
from open_webui.config import CACHE_DIR
from open_webui.constants import ERROR_MESSAGES
from fastapi import APIRouter, Depends, HTTPException, Request, status
from open_webui.utils.tools import get_tools_specs
@@ -300,38 +299,35 @@ async def update_tools_valves_by_id(
request: Request, id: str, form_data: dict, user=Depends(get_verified_user)
):
tools = Tools.get_tool_by_id(id)
if tools:
if id in request.app.state.TOOLS:
tools_module = request.app.state.TOOLS[id]
else:
tools_module, _ = load_tools_module_by_id(id)
request.app.state.TOOLS[id] = tools_module
if hasattr(tools_module, "Valves"):
Valves = tools_module.Valves
try:
form_data = {k: v for k, v in form_data.items() if v is not None}
valves = Valves(**form_data)
Tools.update_tool_valves_by_id(id, valves.model_dump())
return valves.model_dump()
except Exception as e:
print(e)
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail=ERROR_MESSAGES.DEFAULT(str(e)),
)
else:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail=ERROR_MESSAGES.NOT_FOUND,
)
else:
if not tools:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail=ERROR_MESSAGES.NOT_FOUND,
)
if id in request.app.state.TOOLS:
tools_module = request.app.state.TOOLS[id]
else:
tools_module, _ = load_tools_module_by_id(id)
request.app.state.TOOLS[id] = tools_module
if not hasattr(tools_module, "Valves"):
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail=ERROR_MESSAGES.NOT_FOUND,
)
Valves = tools_module.Valves
try:
form_data = {k: v for k, v in form_data.items() if v is not None}
valves = Valves(**form_data)
Tools.update_tool_valves_by_id(id, valves.model_dump())
return valves.model_dump()
except Exception as e:
print(e)
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail=ERROR_MESSAGES.DEFAULT(str(e)),
)
############################
+27 -10
View File
@@ -1181,21 +1181,32 @@ CHUNK_OVERLAP = PersistentConfig(
int(os.environ.get("CHUNK_OVERLAP", "100")),
)
DEFAULT_RAG_TEMPLATE = """You are given a user query, some textual context and rules, all inside xml tags. You have to answer the query based on the context while respecting the rules.
DEFAULT_RAG_TEMPLATE = """### Task:
Respond to the user query using the provided context, incorporating inline citations in the format [source_id] **only when the <source_id> tag is explicitly provided** in the context.
### Guidelines:
- If you don't know the answer, clearly state that.
- If uncertain, ask the user for clarification.
- Respond in the same language as the user's query.
- If the context is unreadable or of poor quality, inform the user and provide the best possible answer.
- If the answer isn't present in the context but you possess the knowledge, explain this to the user and provide the answer using your own understanding.
- **Only include inline citations using [source_id] when a <source_id> tag is explicitly provided in the context.**
- Do not cite if the <source_id> tag is not provided in the context.
- Do not use XML tags in your response.
- Ensure citations are concise and directly related to the information provided.
### Example of Citation:
If the user asks about a specific topic and the information is found in "whitepaper.pdf" with a provided <source_id>, the response should include the citation like so:
* "According to the study, the proposed method increases efficiency by 20% [whitepaper.pdf]."
If no <source_id> is present, the response should omit the citation.
### Output:
Provide a clear and direct response to the user's query, including inline citations in the format [source_id] only when the <source_id> tag is present in the context.
<context>
{{CONTEXT}}
</context>
<rules>
- If you don't know, just say so.
- If you are not sure, ask for clarification.
- Answer in the same language as the user query.
- If the context appears unreadable or of poor quality, tell the user then answer as best as you can.
- If the answer is not in the context but you think you know the answer, explain that to the user then answer with your own knowledge.
- Answer directly and without using xml tags.
</rules>
<user_query>
{{QUERY}}
</user_query>
@@ -1290,6 +1301,12 @@ BRAVE_SEARCH_API_KEY = PersistentConfig(
os.getenv("BRAVE_SEARCH_API_KEY", ""),
)
MOJEEK_SEARCH_API_KEY = PersistentConfig(
"MOJEEK_SEARCH_API_KEY",
"rag.web.search.mojeek_search_api_key",
os.getenv("MOJEEK_SEARCH_API_KEY", ""),
)
SERPSTACK_API_KEY = PersistentConfig(
"SERPSTACK_API_KEY",
"rag.web.search.serpstack_api_key",
+72 -36
View File
@@ -49,7 +49,7 @@ from open_webui.apps.openai.main import (
get_all_models_responses as get_openai_models_responses,
)
from open_webui.apps.retrieval.main import app as retrieval_app
from open_webui.apps.retrieval.utils import get_rag_context, rag_template
from open_webui.apps.retrieval.utils import get_sources_from_files, rag_template
from open_webui.apps.socket.main import (
app as socket_app,
periodic_usage_pool_cleanup,
@@ -380,8 +380,7 @@ async def chat_completion_tools_handler(
return body, {}
skip_files = False
contexts = []
citations = []
sources = []
task_model_id = get_task_model_id(
body["model"],
@@ -463,21 +462,39 @@ async def chat_completion_tools_handler(
except Exception as e:
tool_output = str(e)
if tools[tool_function_name]["citation"]:
citations.append(
{
"source": {
"name": f"TOOL:{tools[tool_function_name]['toolkit_id']}/{tool_function_name}"
},
"document": [tool_output],
"metadata": [{"source": tool_function_name}],
}
)
if tools[tool_function_name]["file_handler"]:
skip_files = True
print(tools[tool_function_name]["citation"])
if isinstance(tool_output, str):
contexts.append(tool_output)
if tools[tool_function_name]["citation"]:
sources.append(
{
"source": {
"name": f"TOOL:{tools[tool_function_name]['toolkit_id']}/{tool_function_name}"
},
"document": [tool_output],
"metadata": [
{
"source": f"TOOL:{tools[tool_function_name]['toolkit_id']}/{tool_function_name}"
}
],
}
)
else:
sources.append(
{
"source": {},
"document": [tool_output],
"metadata": [
{
"source": f"TOOL:{tools[tool_function_name]['toolkit_id']}/{tool_function_name}"
}
],
}
)
if tools[tool_function_name]["file_handler"]:
skip_files = True
except Exception as e:
log.exception(f"Error: {e}")
content = None
@@ -485,19 +502,18 @@ async def chat_completion_tools_handler(
log.exception(f"Error: {e}")
content = None
log.debug(f"tool_contexts: {contexts}")
log.debug(f"tool_contexts: {sources}")
if skip_files and "files" in body.get("metadata", {}):
del body["metadata"]["files"]
return body, {"contexts": contexts, "citations": citations}
return body, {"sources": sources}
async def chat_completion_files_handler(
body: dict, user: UserModel
) -> tuple[dict, dict[str, list]]:
contexts = []
citations = []
sources = []
try:
queries_response = await generate_queries(
@@ -525,7 +541,7 @@ async def chat_completion_files_handler(
print(f"{queries=}")
if files := body.get("metadata", {}).get("files", None):
contexts, citations = get_rag_context(
sources = get_sources_from_files(
files=files,
queries=queries,
embedding_function=retrieval_app.state.EMBEDDING_FUNCTION,
@@ -535,9 +551,8 @@ async def chat_completion_files_handler(
hybrid_search=retrieval_app.state.config.ENABLE_RAG_HYBRID_SEARCH,
)
log.debug(f"rag_contexts: {contexts}, citations: {citations}")
return body, {"contexts": contexts, "citations": citations}
log.debug(f"rag_contexts:sources: {sources}")
return body, {"sources": sources}
def is_chat_completion_request(request):
@@ -638,8 +653,7 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware):
# Initialize data_items to store additional data to be sent to the client
# Initialize contexts and citation
data_items = []
contexts = []
citations = []
sources = []
try:
body, flags = await chat_completion_filter_functions_handler(
@@ -665,21 +679,36 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware):
body, flags = await chat_completion_tools_handler(
body, user, models, extra_params
)
contexts.extend(flags.get("contexts", []))
citations.extend(flags.get("citations", []))
sources.extend(flags.get("sources", []))
except Exception as e:
log.exception(e)
try:
body, flags = await chat_completion_files_handler(body, user)
contexts.extend(flags.get("contexts", []))
citations.extend(flags.get("citations", []))
sources.extend(flags.get("sources", []))
except Exception as e:
log.exception(e)
# If context is not empty, insert it into the messages
if len(contexts) > 0:
context_string = "/n".join(contexts).strip()
if len(sources) > 0:
context_string = ""
for source_idx, source in enumerate(sources):
source_id = source.get("source", {}).get("name", "")
if "document" in source:
for doc_idx, doc_context in enumerate(source["document"]):
metadata = source.get("metadata")
if metadata:
doc_source_id = metadata[doc_idx].get("source", source_id)
if source_id:
context_string += f"<source><source_id>{doc_source_id}</source_id><source_context>{doc_context}</source_context></source>\n"
else:
# If there is no source_id, then do not include the source_id tag
context_string += f"<source><source_context>{doc_context}</source_context></source>\n"
context_string = context_string.strip()
prompt = get_last_user_message(body["messages"])
if prompt is None:
@@ -710,8 +739,11 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware):
)
# If there are citations, add them to the data_items
if len(citations) > 0:
data_items.append({"citations": citations})
sources = [
source for source in sources if source.get("source", {}).get("name", "")
]
if len(sources) > 0:
data_items.append({"sources": sources})
modified_body_bytes = json.dumps(body).encode("utf-8")
# Replace the request body with the modified one
@@ -855,6 +887,11 @@ class PipelineMiddleware(BaseHTTPMiddleware):
status_code=status.HTTP_401_UNAUTHORIZED,
content={"detail": "Not authenticated"},
)
except HTTPException as e:
return JSONResponse(
status_code=e.status_code,
content={"detail": e.detail},
)
model_list = await get_all_models()
models = {model["id"]: model for model in model_list}
@@ -1015,7 +1052,7 @@ async def get_all_base_models():
return models
@cached(ttl=1)
@cached(ttl=3)
async def get_all_models():
models = await get_all_base_models()
@@ -1308,7 +1345,6 @@ async def generate_chat_completions(
@app.post("/api/chat/completed")
async def chat_completed(form_data: dict, user=Depends(get_verified_user)):
model_list = await get_all_models()
models = {model["id"]: model for model in model_list}
-112
View File
@@ -1,112 +0,0 @@
from ast import literal_eval
from typing import Any, Literal, Optional, Type
from pydantic import BaseModel, Field, create_model
def json_schema_to_model(tool_dict: dict[str, Any]) -> Type[BaseModel]:
"""
Converts a JSON schema to a Pydantic BaseModel class.
Args:
json_schema: The JSON schema to convert.
Returns:
A Pydantic BaseModel class.
"""
# Extract the model name from the schema title.
model_name = tool_dict["name"]
schema = tool_dict["parameters"]
# Extract the field definitions from the schema properties.
field_definitions = {
name: json_schema_to_pydantic_field(name, prop, schema.get("required", []))
for name, prop in schema.get("properties", {}).items()
}
# Create the BaseModel class using create_model().
return create_model(model_name, **field_definitions)
def json_schema_to_pydantic_field(
name: str, json_schema: dict[str, Any], required: list[str]
) -> Any:
"""
Converts a JSON schema property to a Pydantic field definition.
Args:
name: The field name.
json_schema: The JSON schema property.
Returns:
A Pydantic field definition.
"""
# Get the field type.
type_ = json_schema_to_pydantic_type(json_schema)
# Get the field description.
description = json_schema.get("description")
# Get the field examples.
examples = json_schema.get("examples")
# Create a Field object with the type, description, and examples.
# The 'required' flag will be set later when creating the model.
return (
type_,
Field(
description=description,
examples=examples,
default=... if name in required else None,
),
)
def json_schema_to_pydantic_type(json_schema: dict[str, Any]) -> Any:
"""
Converts a JSON schema type to a Pydantic type.
Args:
json_schema: The JSON schema to convert.
Returns:
A Pydantic type.
"""
type_ = json_schema.get("type")
if type_ == "string" or type_ == "str":
return str
elif type_ == "integer" or type_ == "int":
return int
elif type_ == "number" or type_ == "float":
return float
elif type_ == "boolean" or type_ == "bool":
return bool
elif type_ == "array" or type_ == "list":
items_schema = json_schema.get("items")
if items_schema:
item_type = json_schema_to_pydantic_type(items_schema)
return list[item_type]
else:
return list
elif type_ == "object":
# Handle nested models.
properties = json_schema.get("properties")
if properties:
nested_model = json_schema_to_model(json_schema)
return nested_model
else:
return dict
elif type_ == "null":
return Optional[Any] # Use Optional[Any] for nullable fields
elif type_ == "literal":
return Literal[literal_eval(json_schema.get("enum"))]
elif type_ == "optional":
inner_schema = json_schema.get("items", {"type": "string"})
inner_type = json_schema_to_pydantic_type(inner_schema)
return Optional[inner_type]
else:
raise ValueError(f"Unsupported JSON schema type: {type_}")
+79 -88
View File
@@ -1,11 +1,14 @@
import inspect
import logging
from typing import Awaitable, Callable, get_type_hints
import re
from typing import Any, Awaitable, Callable, get_type_hints
from functools import update_wrapper, partial
from langchain_core.utils.function_calling import convert_to_openai_function
from open_webui.apps.webui.models.tools import Tools
from open_webui.apps.webui.models.users import UserModel
from open_webui.apps.webui.utils import load_tools_module_by_id
from open_webui.utils.schemas import json_schema_to_model
from pydantic import BaseModel, Field, create_model
log = logging.getLogger(__name__)
@@ -14,17 +17,16 @@ def apply_extra_params_to_tool_function(
function: Callable, extra_params: dict
) -> Callable[..., Awaitable]:
sig = inspect.signature(function)
extra_params = {
key: value for key, value in extra_params.items() if key in sig.parameters
}
is_coroutine = inspect.iscoroutinefunction(function)
extra_params = {k: v for k, v in extra_params.items() if k in sig.parameters}
partial_func = partial(function, **extra_params)
if inspect.iscoroutinefunction(function):
update_wrapper(partial_func, function)
return partial_func
async def new_function(**kwargs):
extra_kwargs = kwargs | extra_params
if is_coroutine:
return await function(**extra_kwargs)
return function(**extra_kwargs)
async def new_function(*args, **kwargs):
return partial_func(*args, **kwargs)
update_wrapper(new_function, function)
return new_function
@@ -55,11 +57,6 @@ def get_tools(
)
for spec in tools.specs:
# TODO: Fix hack for OpenAI API
for val in spec.get("parameters", {}).get("properties", {}).values():
if val["type"] == "str":
val["type"] = "string"
# Remove internal parameters
spec["parameters"]["properties"] = {
key: val
@@ -72,15 +69,12 @@ def get_tools(
# convert to function that takes only model params and inserts custom params
original_func = getattr(module, function_name)
callable = apply_extra_params_to_tool_function(original_func, extra_params)
if hasattr(original_func, "__doc__"):
callable.__doc__ = original_func.__doc__
# TODO: This needs to be a pydantic model
tool_dict = {
"toolkit_id": tool_id,
"callable": callable,
"spec": spec,
"pydantic_model": json_schema_to_model(spec),
"pydantic_model": function_to_pydantic_model(callable),
"file_handler": hasattr(module, "file_handler") and module.file_handler,
"citation": hasattr(module, "citation") and module.citation,
}
@@ -96,78 +90,75 @@ def get_tools(
return tools_dict
def doc_to_dict(docstring):
lines = docstring.split("\n")
description = lines[1].strip()
param_dict = {}
def parse_docstring(docstring):
"""
Parse a function's docstring to extract parameter descriptions in reST format.
for line in lines:
if ":param" in line:
line = line.replace(":param", "").strip()
param, desc = line.split(":", 1)
param_dict[param.strip()] = desc.strip()
ret_dict = {"description": description, "params": param_dict}
return ret_dict
Args:
docstring (str): The docstring to parse.
Returns:
dict: A dictionary where keys are parameter names and values are descriptions.
"""
if not docstring:
return {}
# Regex to match `:param name: description` format
param_pattern = re.compile(r":param (\w+):\s*(.+)")
param_descriptions = {}
for line in docstring.splitlines():
match = param_pattern.match(line.strip())
if match:
param_name, param_description = match.groups()
param_descriptions[param_name] = param_description
return param_descriptions
def get_tools_specs(tools) -> list[dict]:
function_list = [
{"name": func, "function": getattr(tools, func)}
for func in dir(tools)
if callable(getattr(tools, func))
def function_to_pydantic_model(func: Callable) -> type[BaseModel]:
"""
Converts a Python function's type hints and docstring to a Pydantic model,
including support for nested types, default values, and descriptions.
Args:
func: The function whose type hints and docstring should be converted.
model_name: The name of the generated Pydantic model.
Returns:
A Pydantic model class.
"""
type_hints = get_type_hints(func)
signature = inspect.signature(func)
parameters = signature.parameters
docstring = func.__doc__
descriptions = parse_docstring(docstring)
field_defs = {}
for name, param in parameters.items():
type_hint = type_hints.get(name, Any)
default_value = param.default if param.default is not param.empty else ...
description = descriptions.get(name, None)
if not description:
field_defs[name] = type_hint, default_value
continue
field_defs[name] = type_hint, Field(default_value, description=description)
return create_model(func.__name__, **field_defs)
def get_callable_attributes(tool: object) -> list[Callable]:
return [
getattr(tool, func)
for func in dir(tool)
if callable(getattr(tool, func))
and not func.startswith("__")
and not inspect.isclass(getattr(tools, func))
and not inspect.isclass(getattr(tool, func))
]
specs = []
for function_item in function_list:
function_name = function_item["name"]
function = function_item["function"]
function_doc = doc_to_dict(function.__doc__ or function_name)
specs.append(
{
"name": function_name,
# TODO: multi-line desc?
"description": function_doc.get("description", function_name),
"parameters": {
"type": "object",
"properties": {
param_name: {
"type": param_annotation.__name__.lower(),
**(
{
"enum": (
str(param_annotation.__args__)
if hasattr(param_annotation, "__args__")
else None
)
}
if hasattr(param_annotation, "__args__")
else {}
),
"description": function_doc.get("params", {}).get(
param_name, param_name
),
}
for param_name, param_annotation in get_type_hints(
function
).items()
if param_name != "return"
and not (
param_name.startswith("__") and param_name.endswith("__")
)
},
"required": [
name
for name, param in inspect.signature(
function
).parameters.items()
if param.default is param.empty
and not (name.startswith("__") and name.endswith("__"))
],
},
}
)
return specs
def get_tools_specs(tool_class: object) -> list[dict]:
function_list = get_callable_attributes(tool_class)
models = map(function_to_pydantic_model, function_list)
return [convert_to_openai_function(tool) for tool in models]
+3 -3
View File
@@ -37,8 +37,8 @@ anthropic
google-generativeai==0.7.2
tiktoken
langchain==0.3.5
langchain-community==0.3.3
langchain==0.3.7
langchain-community==0.3.7
langchain-chroma==0.1.4
fake-useragent==1.5.1
@@ -82,7 +82,7 @@ authlib==1.3.2
black==24.8.0
langfuse==2.44.0
youtube-transcript-api==0.6.2
youtube-transcript-api==0.6.3
pytube==15.0.0
extract_msg
+942 -15
View File
File diff suppressed because it is too large Load Diff
+9 -1
View File
@@ -1,6 +1,6 @@
{
"name": "open-webui",
"version": "0.4.0",
"version": "0.4.3",
"private": true,
"scripts": {
"dev": "npm run pyodide:fetch && vite dev --host",
@@ -37,6 +37,7 @@
"postcss": "^8.4.31",
"prettier": "^3.3.3",
"prettier-plugin-svelte": "^3.2.6",
"sass-embedded": "^1.81.0",
"svelte": "^4.2.18",
"svelte-check": "^3.8.5",
"svelte-confetti": "^1.3.2",
@@ -56,6 +57,13 @@
"@mediapipe/tasks-vision": "^0.10.17",
"@pyscript/core": "^0.4.32",
"@sveltejs/adapter-node": "^2.0.0",
"@tiptap/core": "^2.10.0",
"@tiptap/extension-code-block-lowlight": "^2.10.0",
"@tiptap/extension-highlight": "^2.10.0",
"@tiptap/extension-placeholder": "^2.10.0",
"@tiptap/extension-typography": "^2.10.0",
"@tiptap/pm": "^2.10.0",
"@tiptap/starter-kit": "^2.10.0",
"@xyflow/svelte": "^0.1.19",
"async": "^3.2.5",
"bits-ui": "^0.19.7",
+3 -3
View File
@@ -44,8 +44,8 @@ dependencies = [
"google-generativeai==0.7.2",
"tiktoken",
"langchain==0.3.5",
"langchain-community==0.3.3",
"langchain==0.3.7",
"langchain-community==0.3.7",
"langchain-chroma==0.1.4",
"fake-useragent==1.5.1",
@@ -88,7 +88,7 @@ dependencies = [
"black==24.8.0",
"langfuse==2.44.0",
"youtube-transcript-api==0.6.2",
"youtube-transcript-api==0.6.3",
"pytube==15.0.0",
"extract_msg",
+74 -7
View File
@@ -199,19 +199,86 @@ input[type='number'] {
}
.ProseMirror {
@apply h-full min-h-fit max-h-full whitespace-pre-wrap;
@apply h-full min-h-fit max-h-full whitespace-pre-wrap;
}
.ProseMirror:focus {
outline: none;
}
.placeholder::after {
.ProseMirror p.is-editor-empty:first-child::before {
content: attr(data-placeholder);
cursor: text;
pointer-events: none;
float: left;
@apply absolute inset-0 z-0 text-gray-500;
color: #adb5bd;
pointer-events: none;
height: 0;
}
.tiptap > pre > code {
border-radius: 0.4rem;
font-size: 0.85rem;
padding: 0.25em 0.3em;
@apply dark:bg-gray-800 bg-gray-100;
}
.tiptap > pre {
border-radius: 0.5rem;
font-family: 'JetBrainsMono', monospace;
margin: 1.5rem 0;
padding: 0.75rem 1rem;
@apply dark:bg-gray-800 bg-gray-100;
}
/* Code styling */
.hljs-comment,
.hljs-quote {
color: #616161;
}
.hljs-variable,
.hljs-template-variable,
.hljs-attribute,
.hljs-tag,
.hljs-regexp,
.hljs-link,
.hljs-name,
.hljs-selector-id,
.hljs-selector-class {
color: #f98181;
}
.hljs-number,
.hljs-meta,
.hljs-built_in,
.hljs-builtin-name,
.hljs-literal,
.hljs-type,
.hljs-params {
color: #fbbc88;
}
.hljs-string,
.hljs-symbol,
.hljs-bullet {
color: #b9f18d;
}
.hljs-title,
.hljs-section {
color: #faf594;
}
.hljs-keyword,
.hljs-selector-tag {
color: #70cff8;
}
.hljs-emphasis {
font-style: italic;
}
.hljs-strong {
font-weight: 700;
}
+5 -5
View File
@@ -3,7 +3,7 @@ import { WEBUI_API_BASE_URL } from '$lib/constants';
export const getModels = async (token: string = '') => {
let error = null;
const res = await fetch(`${WEBUI_API_BASE_URL}/models`, {
const res = await fetch(`${WEBUI_API_BASE_URL}/models/`, {
method: 'GET',
headers: {
Accept: 'application/json',
@@ -97,7 +97,7 @@ export const getModelById = async (token: string, id: string) => {
const searchParams = new URLSearchParams();
searchParams.append('id', id);
const res = await fetch(`${WEBUI_API_BASE_URL}/models/id/${id}`, {
const res = await fetch(`${WEBUI_API_BASE_URL}/models/model?${searchParams.toString()}`, {
method: 'GET',
headers: {
Accept: 'application/json',
@@ -132,7 +132,7 @@ export const toggleModelById = async (token: string, id: string) => {
const searchParams = new URLSearchParams();
searchParams.append('id', id);
const res = await fetch(`${WEBUI_API_BASE_URL}/models/id/${id}/toggle`, {
const res = await fetch(`${WEBUI_API_BASE_URL}/models/model/toggle?${searchParams.toString()}`, {
method: 'POST',
headers: {
Accept: 'application/json',
@@ -167,7 +167,7 @@ export const updateModelById = async (token: string, id: string, model: object)
const searchParams = new URLSearchParams();
searchParams.append('id', id);
const res = await fetch(`${WEBUI_API_BASE_URL}/models/id/${id}/update`, {
const res = await fetch(`${WEBUI_API_BASE_URL}/models/model/update?${searchParams.toString()}`, {
method: 'POST',
headers: {
Accept: 'application/json',
@@ -203,7 +203,7 @@ export const deleteModelById = async (token: string, id: string) => {
const searchParams = new URLSearchParams();
searchParams.append('id', id);
const res = await fetch(`${WEBUI_API_BASE_URL}/models/id/${id}/delete`, {
const res = await fetch(`${WEBUI_API_BASE_URL}/models/model/delete?${searchParams.toString()}`, {
method: 'DELETE',
headers: {
Accept: 'application/json',
+4 -4
View File
@@ -5,7 +5,7 @@ type TextStreamUpdate = {
done: boolean;
value: string;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
citations?: any;
sources?: any;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
selectedModelId?: any;
error?: any;
@@ -67,8 +67,8 @@ async function* openAIStreamToIterator(
break;
}
if (parsedData.citations) {
yield { done: false, value: '', citations: parsedData.citations };
if (parsedData.sources) {
yield { done: false, value: '', sources: parsedData.sources };
continue;
}
@@ -98,7 +98,7 @@ async function* streamLargeDeltasAsRandomChunks(
yield textStreamUpdate;
return;
}
if (textStreamUpdate.citations) {
if (textStreamUpdate.sources) {
yield textStreamUpdate;
continue;
}
@@ -60,7 +60,7 @@
/>
{#if pipeline}
<div class=" absolute top-2.5 right-2.5">
<div class=" absolute top-0.5 right-2.5">
<Tooltip content="Pipelines">
<svg
xmlns="http://www.w3.org/2000/svg"
@@ -102,7 +102,7 @@
description = model.meta.description;
modelIds = model.meta.model_ids || [];
filterMode = model.meta?.filter_mode ?? 'include';
accessControl = model.meta?.access_control ?? {};
accessControl = 'access_control' in model.meta ? model.meta.access_control : {};
}
};
@@ -186,7 +186,7 @@
<div class=" my-2 mb-5" id="model-list">
{#if models.length > 0}
{#each filteredModels as model (model.id)}
{#each filteredModels as model, modelIdx (`${model.id}-${modelIdx}`)}
<div
class=" flex space-x-4 cursor-pointer w-full px-3 py-2 dark:hover:bg-white/5 hover:bg-black/5 rounded-lg transition"
id="model-item-{model.id}"
@@ -16,6 +16,7 @@
'searxng',
'google_pse',
'brave',
'mojeek',
'serpstack',
'serper',
'serply',
@@ -151,6 +152,17 @@
bind:value={webConfig.search.brave_search_api_key}
/>
</div>
{:else if webConfig.search.engine === 'mojeek'}
<div>
<div class=" self-center text-xs font-medium mb-1">
{$i18n.t('Mojeek Search API Key')}
</div>
<SensitiveInput
placeholder={$i18n.t('Enter Mojeek Search API Key')}
bind:value={webConfig.search.mojeek_search_api_key}
/>
</div>
{:else if webConfig.search.engine === 'serpstack'}
<div>
<div class=" self-center text-xs font-medium mb-1">
+15 -13
View File
@@ -216,7 +216,7 @@
} else {
message.statusHistory = [data];
}
} else if (type === 'citation') {
} else if (type === 'source') {
if (data?.type === 'code_execution') {
// Code execution; update existing code execution by ID, or add new one.
if (!message?.code_executions) {
@@ -235,11 +235,11 @@
message.code_executions = message.code_executions;
} else {
// Regular citation.
if (message?.citations) {
message.citations.push(data);
// Regular source.
if (message?.sources) {
message.sources.push(data);
} else {
message.citations = [data];
message.sources = [data];
}
}
} else if (type === 'message') {
@@ -663,7 +663,8 @@
role: m.role,
content: m.content,
info: m.info ? m.info : undefined,
timestamp: m.timestamp
timestamp: m.timestamp,
...(m.sources ? { sources: m.sources } : {})
})),
chat_id: chatId,
session_id: $socket?.id,
@@ -716,7 +717,8 @@
role: m.role,
content: m.content,
info: m.info ? m.info : undefined,
timestamp: m.timestamp
timestamp: m.timestamp,
...(m.sources ? { sources: m.sources } : {})
})),
...(event ? { event: event } : {}),
chat_id: chatId,
@@ -1276,8 +1278,8 @@
console.log(line);
let data = JSON.parse(line);
if ('citations' in data) {
responseMessage.citations = data.citations;
if ('sources' in data) {
responseMessage.sources = data.sources;
// Only remove status if it was initially set
if (model?.info?.meta?.knowledge ?? false) {
responseMessage.statusHistory = responseMessage.statusHistory.filter(
@@ -1630,7 +1632,7 @@
const textStream = await createOpenAITextStream(res.body, $settings.splitLargeChunks);
for await (const update of textStream) {
const { value, done, citations, selectedModelId, error, usage } = update;
const { value, done, sources, selectedModelId, error, usage } = update;
if (error) {
await handleOpenAIError(error, null, model, responseMessage);
break;
@@ -1656,8 +1658,8 @@
continue;
}
if (citations) {
responseMessage.citations = citations;
if (sources) {
responseMessage.sources = sources;
// Only remove status if it was initially set
if (model?.info?.meta?.knowledge ?? false) {
responseMessage.statusHistory = responseMessage.statusHistory.filter(
@@ -1936,7 +1938,7 @@
if (res && res.ok && res.body) {
const textStream = await createOpenAITextStream(res.body, $settings.splitLargeChunks);
for await (const update of textStream) {
const { value, done, citations, error, usage } = update;
const { value, done, sources, error, usage } = update;
if (error || done) {
break;
}
+36 -57
View File
@@ -75,14 +75,6 @@
(model) => $models.find((m) => m.id === model)?.info?.meta?.capabilities?.vision ?? true
);
$: if (prompt) {
if (chatInputContainerElement) {
chatInputContainerElement.style.height = '';
chatInputContainerElement.style.height =
Math.min(chatInputContainerElement.scrollHeight, 200) + 'px';
}
}
const scrollToBottom = () => {
const element = document.getElementById('messages-container');
element.scrollTo({
@@ -321,12 +313,22 @@
<span class="relative inline-flex rounded-full size-2 bg-yellow-500" />
</span>
</div>
<div class=" translate-y-[0.5px] line-clamp-1">
{selectedToolIds
.map((id) => {
return $tools ? $tools.find((tool) => tool.id === id)?.name : id;
})
.join(', ')}
<div class=" translate-y-[0.5px] text-ellipsis line-clamp-1 flex">
{#each selectedToolIds.map((id) => {
return $tools ? $tools.find((t) => t.id === id) : { id: id, name: id };
}) as tool, toolIdx (toolIdx)}
<Tooltip
content={tool?.meta?.description ?? ''}
className=" {toolIdx !== 0 ? 'pl-0.5' : ''} flex-shrink-0"
placement="top"
>
{tool.name}
</Tooltip>
{#if toolIdx !== selectedToolIds.length - 1}
<span>, </span>
{/if}
{/each}
</div>
</div>
</div>
@@ -575,54 +577,47 @@
{#if $settings?.richTextInput ?? true}
<div
bind:this={chatInputContainerElement}
id="chat-input-container"
class="scrollbar-hidden text-left bg-gray-50 dark:bg-gray-850 dark:text-gray-100 outline-none w-full py-2.5 px-1 rounded-xl resize-none h-[48px] overflow-auto"
class="scrollbar-hidden text-left bg-gray-50 dark:bg-gray-850 dark:text-gray-100 outline-none w-full py-2.5 px-1 rounded-xl resize-none h-fit max-h-60 overflow-auto"
>
<RichTextInput
bind:this={chatInputElement}
id="chat-input"
trim={true}
placeholder={placeholder ? placeholder : $i18n.t('Send a Message')}
largeTextAsFile={$settings?.largeTextAsFile ?? false}
bind:value={prompt}
messageInput={true}
shiftEnter={!$mobile ||
!(
'ontouchstart' in window ||
navigator.maxTouchPoints > 0 ||
navigator.msMaxTouchPoints > 0
)}
placeholder={placeholder ? placeholder : $i18n.t('Send a Message')}
largeTextAsFile={$settings?.largeTextAsFile ?? false}
bind:value={prompt}
on:enter={async (e) => {
const commandsContainerElement =
document.getElementById('commands-container');
if (commandsContainerElement) {
e.preventDefault();
const commandOptionButton = [
...document.getElementsByClassName('selected-command-option-button')
]?.at(-1);
if (commandOptionButton) {
commandOptionButton?.click();
return;
}
}
if (prompt !== '') {
dispatch('submit', prompt);
}
}}
on:input={async (e) => {
if (chatInputContainerElement) {
chatInputContainerElement.style.height = '';
chatInputContainerElement.style.height =
Math.min(chatInputContainerElement.scrollHeight, 200) + 'px';
}
}}
on:focus={async (e) => {
if (chatInputContainerElement) {
chatInputContainerElement.style.height = '';
chatInputContainerElement.style.height =
Math.min(chatInputContainerElement.scrollHeight, 200) + 'px';
}
}}
on:keypress={(e) => {
e = e.detail.event;
}}
on:keydown={async (e) => {
e = e.detail.event;
if (chatInputContainerElement) {
chatInputContainerElement.style.height = '';
chatInputContainerElement.style.height =
Math.min(chatInputContainerElement.scrollHeight, 200) + 'px';
}
const isCtrlPressed = e.ctrlKey || e.metaKey; // metaKey is for Cmd key on Mac
const commandsContainerElement =
document.getElementById('commands-container');
@@ -682,22 +677,6 @@
commandOptionButton.scrollIntoView({ block: 'center' });
}
if (commandsContainerElement && e.key === 'Enter') {
e.preventDefault();
const commandOptionButton = [
...document.getElementsByClassName('selected-command-option-button')
]?.at(-1);
if (e.shiftKey) {
prompt = `${prompt}\n`;
} else if (commandOptionButton) {
commandOptionButton?.click();
} else {
document.getElementById('send-message-button')?.click();
}
}
if (commandsContainerElement && e.key === 'Tab') {
e.preventDefault();
@@ -7,9 +7,9 @@
const i18n = getContext('i18n');
export let citations = [];
export let sources = [];
let _citations = [];
let citations = [];
let showPercentage = false;
let showRelevance = true;
@@ -17,8 +17,8 @@
let selectedCitation: any = null;
let isCollapsibleOpen = false;
function calculateShowRelevance(citations: any[]) {
const distances = citations.flatMap((citation) => citation.distances ?? []);
function calculateShowRelevance(sources: any[]) {
const distances = sources.flatMap((citation) => citation.distances ?? []);
const inRange = distances.filter((d) => d !== undefined && d >= -1 && d <= 1).length;
const outOfRange = distances.filter((d) => d !== undefined && (d < -1 || d > 1)).length;
@@ -36,25 +36,31 @@
return true;
}
function shouldShowPercentage(citations: any[]) {
const distances = citations.flatMap((citation) => citation.distances ?? []);
function shouldShowPercentage(sources: any[]) {
const distances = sources.flatMap((citation) => citation.distances ?? []);
return distances.every((d) => d !== undefined && d >= -1 && d <= 1);
}
$: {
_citations = citations.reduce((acc, citation) => {
citation.document.forEach((document, index) => {
const metadata = citation.metadata?.[index];
const distance = citation.distances?.[index];
citations = sources.reduce((acc, source) => {
if (Object.keys(source).length === 0) {
return acc;
}
source.document.forEach((document, index) => {
const metadata = source.metadata?.[index];
const distance = source.distances?.[index];
// Within the same citation there could be multiple documents
const id = metadata?.source ?? 'N/A';
let source = citation?.source;
let _source = source?.source;
if (metadata?.name) {
source = { ...source, name: metadata.name };
_source = { ..._source, name: metadata.name };
}
if (id.startsWith('http://') || id.startsWith('https://')) {
source = { ...source, name: id, url: id };
_source = { ..._source, name: id, url: id };
}
const existingSource = acc.find((item) => item.id === id);
@@ -66,7 +72,7 @@
} else {
acc.push({
id: id,
source: source,
source: _source,
document: [document],
metadata: metadata ? [metadata] : [],
distances: distance !== undefined ? [distance] : undefined
@@ -76,8 +82,8 @@
return acc;
}, []);
showRelevance = calculateShowRelevance(_citations);
showPercentage = shouldShowPercentage(_citations);
showRelevance = calculateShowRelevance(citations);
showPercentage = shouldShowPercentage(citations);
}
</script>
@@ -88,24 +94,27 @@
{showRelevance}
/>
{#if _citations.length > 0}
{#if citations.length > 0}
<div class=" py-0.5 -mx-0.5 w-full flex gap-1 items-center flex-wrap">
{#if _citations.length <= 3}
{#if citations.length <= 3}
<div class="flex text-xs font-medium">
{#each _citations as citation, idx}
{#each citations as citation, idx}
<button
class="no-toggle outline-none flex dark:text-gray-300 p-1 bg-gray-50 hover:bg-gray-100 dark:bg-gray-900 dark:hover:bg-gray-850 transition rounded-xl max-w-96"
id={`source-${citation.source.name}`}
class="no-toggle outline-none flex dark:text-gray-300 p-1 bg-white dark:bg-gray-900 rounded-xl max-w-96"
on:click={() => {
showCitationModal = true;
selectedCitation = citation;
}}
>
{#if _citations.every((c) => c.distances !== undefined)}
{#if citations.every((c) => c.distances !== undefined)}
<div class="bg-gray-50 dark:bg-gray-800 rounded-full size-4">
{idx + 1}
</div>
{/if}
<div class="flex-1 mx-1 line-clamp-1 truncate">
<div
class="flex-1 mx-1 line-clamp-1 text-black/60 hover:text-black dark:text-white/60 dark:hover:text-white transition"
>
{citation.source.name}
</div>
</button>
@@ -120,7 +129,7 @@
<span class="whitespace-nowrap hidden sm:inline">{$i18n.t('References from')}</span>
<div class="flex items-center">
<div class="flex text-xs font-medium items-center">
{#each _citations.slice(0, 2) as citation, idx}
{#each citations.slice(0, 2) as citation, idx}
<button
class="no-toggle outline-none flex dark:text-gray-300 p-1 bg-gray-50 hover:bg-gray-100 dark:bg-gray-900 dark:hover:bg-gray-850 transition rounded-xl max-w-96"
on:click={() => {
@@ -131,7 +140,7 @@
e.stopPropagation();
}}
>
{#if _citations.every((c) => c.distances !== undefined)}
{#if citations.every((c) => c.distances !== undefined)}
<div class="bg-gray-50 dark:bg-gray-800 rounded-full size-4">
{idx + 1}
</div>
@@ -145,7 +154,7 @@
</div>
<div class="flex items-center gap-1 whitespace-nowrap">
<span class="hidden sm:inline">{$i18n.t('and')}</span>
{_citations.length - 2}
{citations.length - 2}
<span>{$i18n.t('more')}</span>
</div>
</div>
@@ -159,7 +168,7 @@
</div>
<div slot="content">
<div class="flex text-xs font-medium">
{#each _citations as citation, idx}
{#each citations as citation, idx}
<button
class="no-toggle outline-none flex dark:text-gray-300 p-1 bg-gray-50 hover:bg-gray-100 dark:bg-gray-900 dark:hover:bg-gray-850 transition rounded-xl max-w-96"
on:click={() => {
@@ -167,7 +176,7 @@
selectedCitation = citation;
}}
>
{#if _citations.every((c) => c.distances !== undefined)}
{#if citations.every((c) => c.distances !== undefined)}
<div class="bg-gray-50 dark:bg-gray-800 rounded-full size-4">
{idx + 1}
</div>
@@ -7,13 +7,16 @@
import LightBlub from '$lib/components/icons/LightBlub.svelte';
import { chatId, mobile, showArtifacts, showControls, showOverview } from '$lib/stores';
import ChatBubble from '$lib/components/icons/ChatBubble.svelte';
import { stringify } from 'postcss';
export let id;
export let content;
export let model = null;
export let sources = null;
export let save = false;
export let floatingButtons = true;
export let onSourceClick = () => {};
let contentContainerElement;
let buttonsContainerElement;
@@ -129,6 +132,32 @@
{content}
{model}
{save}
sourceIds={(sources ?? []).reduce((acc, s) => {
let ids = [];
s.document.forEach((document, index) => {
const metadata = s.metadata?.[index];
const id = metadata?.source ?? 'N/A';
if (metadata?.name) {
ids.push(metadata.name);
return ids;
}
if (id.startsWith('http://') || id.startsWith('https://')) {
ids.push(id);
} else {
ids.push(s?.source?.name ?? id);
}
return ids;
});
acc = [...acc, ...ids];
// remove duplicates
return acc.filter((item, index) => acc.indexOf(item) === index);
}, [])}
{onSourceClick}
on:update={(e) => {
dispatch('update', e.detail);
}}
@@ -16,6 +16,9 @@
export let model = null;
export let save = false;
export let sourceIds = [];
export let onSourceClick = () => {};
let tokens = [];
const options = {
@@ -28,7 +31,7 @@
$: (async () => {
if (content) {
tokens = marked.lexer(
replaceTokens(processResponseContent(content), model?.name, $user?.name)
replaceTokens(processResponseContent(content), sourceIds, model?.name, $user?.name)
);
}
})();
@@ -39,6 +42,7 @@
{tokens}
{id}
{save}
{onSourceClick}
on:update={(e) => {
dispatch('update', e.detail);
}}
@@ -12,9 +12,11 @@
import Image from '$lib/components/common/Image.svelte';
import KatexRenderer from './KatexRenderer.svelte';
import Source from './Source.svelte';
export let id: string;
export let tokens: Token[];
export let onSourceClick: Function = () => {};
</script>
{#each tokens as token}
@@ -26,13 +28,15 @@
{@html html}
{:else if token.text.includes(`<iframe src="${WEBUI_BASE_URL}/api/v1/files/`)}
{@html `${token.text}`}
{:else if token.text.includes(`<source_id`)}
<Source {token} onClick={onSourceClick} />
{:else}
{token.text}
{/if}
{:else if token.type === 'link'}
{#if token.tokens}
<a href={token.href} target="_blank" rel="nofollow" title={token.title}>
<svelte:self id={`${id}-a`} tokens={token.tokens} />
<svelte:self id={`${id}-a`} tokens={token.tokens} {onSourceClick} />
</a>
{:else}
<a href={token.href} target="_blank" rel="nofollow" title={token.title}>{token.text}</a>
@@ -41,11 +45,11 @@
<Image src={token.href} alt={token.text} />
{:else if token.type === 'strong'}
<strong>
<svelte:self id={`${id}-strong`} tokens={token.tokens} />
<svelte:self id={`${id}-strong`} tokens={token.tokens} {onSourceClick} />
</strong>
{:else if token.type === 'em'}
<em>
<svelte:self id={`${id}-em`} tokens={token.tokens} />
<svelte:self id={`${id}-em`} tokens={token.tokens} {onSourceClick} />
</em>
{:else if token.type === 'codespan'}
<!-- svelte-ignore a11y-click-events-have-key-events -->
@@ -61,7 +65,7 @@
<br />
{:else if token.type === 'del'}
<del>
<svelte:self id={`${id}-del`} tokens={token.tokens} />
<svelte:self id={`${id}-del`} tokens={token.tokens} {onSourceClick} />
</del>
{:else if token.type === 'inlineKatex'}
{#if token.text}
@@ -25,6 +25,7 @@
export let top = true;
export let save = false;
export let onSourceClick: Function = () => {};
const headerComponent = (depth: number) => {
return 'h' + depth;
@@ -62,7 +63,7 @@
<hr />
{:else if token.type === 'heading'}
<svelte:element this={headerComponent(token.depth)}>
<MarkdownInlineTokens id={`${id}-${tokenIdx}-h`} tokens={token.tokens} />
<MarkdownInlineTokens id={`${id}-${tokenIdx}-h`} tokens={token.tokens} {onSourceClick} />
</svelte:element>
{:else if token.type === 'code'}
{#if token.raw.includes('```')}
@@ -108,6 +109,7 @@
<MarkdownInlineTokens
id={`${id}-${tokenIdx}-header-${headerIdx}`}
tokens={header.tokens}
{onSourceClick}
/>
</div>
</th>
@@ -126,6 +128,7 @@
<MarkdownInlineTokens
id={`${id}-${tokenIdx}-row-${rowIdx}-${cellIdx}`}
tokens={cell.tokens}
{onSourceClick}
/>
</div>
</td>
@@ -205,19 +208,27 @@
></iframe>
{:else if token.type === 'paragraph'}
<p>
<MarkdownInlineTokens id={`${id}-${tokenIdx}-p`} tokens={token.tokens ?? []} />
<MarkdownInlineTokens
id={`${id}-${tokenIdx}-p`}
tokens={token.tokens ?? []}
{onSourceClick}
/>
</p>
{:else if token.type === 'text'}
{#if top}
<p>
{#if token.tokens}
<MarkdownInlineTokens id={`${id}-${tokenIdx}-t`} tokens={token.tokens} />
<MarkdownInlineTokens id={`${id}-${tokenIdx}-t`} tokens={token.tokens} {onSourceClick} />
{:else}
{unescapeHtml(token.text)}
{/if}
</p>
{:else if token.tokens}
<MarkdownInlineTokens id={`${id}-${tokenIdx}-p`} tokens={token.tokens ?? []} />
<MarkdownInlineTokens
id={`${id}-${tokenIdx}-p`}
tokens={token.tokens ?? []}
{onSourceClick}
/>
{:else}
{unescapeHtml(token.text)}
{/if}
@@ -0,0 +1,25 @@
<script lang="ts">
export let token;
export let onClick: Function = () => {};
let id = '';
function extractDataAttribute(input) {
// Use a regular expression to extract the value of the `data` attribute
const match = input.match(/data="([^"]*)"/);
// Check if a match was found and return the first captured group
return match ? match[1] : null;
}
$: id = extractDataAttribute(token.text);
</script>
<button
class="text-xs font-medium w-fit translate-y-[2px] px-2 py-0.5 dark:bg-white/5 dark:text-white/60 dark:hover:text-white bg-gray-50 text-black/60 hover:text-black transition rounded-lg"
on:click={() => {
onClick(id);
}}
>
<span class="line-clamp-1">
{id}
</span>
</button>
@@ -38,6 +38,7 @@
let selectedReason = null;
let comment = '';
let detailedRating = null;
let selectedModel = null;
$: if (message?.annotation?.rating === 1) {
@@ -56,6 +57,7 @@
tags = (message?.annotation?.tags ?? []).map((tag) => ({
name: tag
}));
detailedRating = message?.annotation?.details?.rating ?? null;
};
onMount(() => {
@@ -79,7 +81,10 @@
dispatch('save', {
reason: selectedReason,
comment: comment,
tags: tags.map((tag) => tag.name)
tags: tags.map((tag) => tag.name),
details: {
rating: detailedRating
}
});
toast.success($i18n.t('Thanks for your feedback!'));
@@ -100,7 +105,9 @@
id="message-feedback-{message.id}"
>
<div class="flex justify-between items-center">
<div class=" text-sm">{$i18n.t('Tell us more:')}</div>
<div class="text-sm font-medium">{$i18n.t('How would you rate this response?')}</div>
<!-- <div class=" text-sm">{$i18n.t('Tell us more:')}</div> -->
<button
on:click={() => {
@@ -120,53 +127,89 @@
</button>
</div>
{#if reasons.length > 0}
<div class="flex flex-wrap gap-1.5 text-sm mt-2.5">
{#each reasons as reason}
<button
class="px-3 py-0.5 border border-gray-50 dark:border-gray-850 hover:bg-gray-100 dark:hover:bg-gray-850 {selectedReason ===
reason
? 'bg-gray-200 dark:bg-gray-800'
: ''} transition rounded-lg"
on:click={() => {
selectedReason = reason;
}}
>
{#if reason === 'accurate_information'}
{$i18n.t('Accurate information')}
{:else if reason === 'followed_instructions_perfectly'}
{$i18n.t('Followed instructions perfectly')}
{:else if reason === 'showcased_creativity'}
{$i18n.t('Showcased creativity')}
{:else if reason === 'positive_attitude'}
{$i18n.t('Positive attitude')}
{:else if reason === 'attention_to_detail'}
{$i18n.t('Attention to detail')}
{:else if reason === 'thorough_explanation'}
{$i18n.t('Thorough explanation')}
{:else if reason === 'dont_like_the_style'}
{$i18n.t("Don't like the style")}
{:else if reason === 'too_verbose'}
{$i18n.t('Too verbose')}
{:else if reason === 'not_helpful'}
{$i18n.t('Not helpful')}
{:else if reason === 'not_factually_correct'}
{$i18n.t('Not factually correct')}
{:else if reason === 'didnt_fully_follow_instructions'}
{$i18n.t("Didn't fully follow instructions")}
{:else if reason === 'refused_when_it_shouldnt_have'}
{$i18n.t("Refused when it shouldn't have")}
{:else if reason === 'being_lazy'}
{$i18n.t('Being lazy')}
{:else if reason === 'other'}
{$i18n.t('Other')}
{:else}
{reason}
{/if}
</button>
{/each}
<div class="w-full flex justify-center">
<div class=" relative w-fit">
<div class="mt-1.5 w-fit flex gap-1 pb-5">
<!-- 1-10 scale -->
{#each Array.from({ length: 10 }).map((_, i) => i + 1) as rating}
<button
class="size-7 text-sm border border-gray-50 dark:border-gray-850 hover:bg-gray-50 dark:hover:bg-gray-850 {detailedRating ===
rating
? 'bg-gray-100 dark:bg-gray-800'
: ''} transition rounded-full disabled:cursor-not-allowed disabled:text-gray-500 disabled:bg-white disabled:dark:bg-gray-900"
on:click={() => {
detailedRating = rating;
}}
disabled={message?.annotation?.rating === -1 ? rating > 5 : rating < 6}
>
{rating}
</button>
{/each}
</div>
<div class="absolute bottom-0 left-0 right-0 flex justify-between text-xs">
<div>
1 - {$i18n.t('Awful')}
</div>
<div>
10 - {$i18n.t('Amazing')}
</div>
</div>
</div>
{/if}
</div>
<div>
{#if reasons.length > 0}
<div class="text-sm mt-1.5 font-medium">{$i18n.t('Why?')}</div>
<div class="flex flex-wrap gap-1.5 text-sm mt-1.5">
{#each reasons as reason}
<button
class="px-3 py-0.5 border border-gray-50 dark:border-gray-850 hover:bg-gray-50 dark:hover:bg-gray-850 {selectedReason ===
reason
? 'bg-gray-100 dark:bg-gray-800'
: ''} transition rounded-xl"
on:click={() => {
selectedReason = reason;
}}
>
{#if reason === 'accurate_information'}
{$i18n.t('Accurate information')}
{:else if reason === 'followed_instructions_perfectly'}
{$i18n.t('Followed instructions perfectly')}
{:else if reason === 'showcased_creativity'}
{$i18n.t('Showcased creativity')}
{:else if reason === 'positive_attitude'}
{$i18n.t('Positive attitude')}
{:else if reason === 'attention_to_detail'}
{$i18n.t('Attention to detail')}
{:else if reason === 'thorough_explanation'}
{$i18n.t('Thorough explanation')}
{:else if reason === 'dont_like_the_style'}
{$i18n.t("Don't like the style")}
{:else if reason === 'too_verbose'}
{$i18n.t('Too verbose')}
{:else if reason === 'not_helpful'}
{$i18n.t('Not helpful')}
{:else if reason === 'not_factually_correct'}
{$i18n.t('Not factually correct')}
{:else if reason === 'didnt_fully_follow_instructions'}
{$i18n.t("Didn't fully follow instructions")}
{:else if reason === 'refused_when_it_shouldnt_have'}
{$i18n.t("Refused when it shouldn't have")}
{:else if reason === 'being_lazy'}
{$i18n.t('Being lazy')}
{:else if reason === 'other'}
{$i18n.t('Other')}
{:else}
{reason}
{/if}
</button>
{/each}
</div>
{/if}
</div>
<div class="mt-2">
<textarea
@@ -195,7 +238,7 @@
</div>
<button
class=" bg-emerald-700 hover:bg-emerald-800 transition text-white text-sm font-medium rounded-xl px-3.5 py-1.5"
class="px-3.5 py-1.5 text-sm font-medium bg-black hover:bg-gray-900 text-white dark:bg-white dark:text-black dark:hover:bg-gray-100 transition rounded-full"
on:click={() => {
saveHandler();
}}
@@ -64,7 +64,7 @@
};
done: boolean;
error?: boolean | { content: string };
citations?: string[];
sources?: string[];
code_executions?: {
uuid: string;
name: string;
@@ -340,19 +340,16 @@
let feedbackLoading = false;
const feedbackHandler = async (
rating: number | null = null,
annotation: object | null = null
) => {
const feedbackHandler = async (rating: number | null = null, details: object | null = null) => {
feedbackLoading = true;
console.log('Feedback', rating, annotation);
console.log('Feedback', rating, details);
const updatedMessage = {
...message,
annotation: {
...(message?.annotation ?? {}),
...(rating !== null ? { rating: rating } : {}),
...(annotation ? annotation : {})
...(details ? details : {})
}
};
@@ -429,7 +426,7 @@
await tick();
if (!annotation) {
if (!details) {
showRateComment = true;
if (!updatedMessage.annotation?.tags) {
@@ -624,9 +621,18 @@
<ContentRenderer
id={message.id}
content={message.content}
sources={message.sources}
floatingButtons={message?.done}
save={!readOnly}
{model}
onSourceClick={(e) => {
console.log(e);
const sourceButton = document.getElementById(`source-${e}`);
if (sourceButton) {
sourceButton.click();
}
}}
on:update={(e) => {
const { raw, oldContent, newContent } = e.detail;
@@ -656,8 +662,8 @@
<Error content={message?.error?.content ?? message.content} />
{/if}
{#if message.citations && (model?.info?.meta?.capabilities?.citations ?? true)}
<Citations citations={message.citations} />
{#if (message?.sources || message?.citations) && (model?.info?.meta?.capabilities?.citations ?? true)}
<Citations sources={message?.sources ?? message?.citations} />
{/if}
{#if message.code_executions}
@@ -1194,9 +1200,7 @@
bind:show={showRateComment}
on:save={async (e) => {
await feedbackHandler(null, {
tags: e.detail.tags,
comment: e.detail.comment,
reason: e.detail.reason
...e.detail
});
}}
/>
@@ -5,11 +5,7 @@
import { models, settings } from '$lib/stores';
import { user as _user } from '$lib/stores';
import {
copyToClipboard as _copyToClipboard,
processResponseContent,
replaceTokens
} from '$lib/utils';
import { copyToClipboard as _copyToClipboard } from '$lib/utils';
import Name from './Name.svelte';
import ProfileImage from './ProfileImage.svelte';
+203 -414
View File
@@ -1,241 +1,46 @@
<script lang="ts">
import { onDestroy, onMount } from 'svelte';
import { marked } from 'marked';
import TurndownService from 'turndown';
const turndownService = new TurndownService();
import { onMount, onDestroy } from 'svelte';
import { createEventDispatcher } from 'svelte';
const eventDispatch = createEventDispatcher();
import { EditorState, Plugin, TextSelection } from 'prosemirror-state';
import { EditorView, Decoration, DecorationSet } from 'prosemirror-view';
import { undo, redo, history } from 'prosemirror-history';
import {
schema,
defaultMarkdownParser,
MarkdownParser,
defaultMarkdownSerializer
} from 'prosemirror-markdown';
import {
inputRules,
wrappingInputRule,
textblockTypeInputRule,
InputRule
} from 'prosemirror-inputrules'; // Import input rules
import { splitListItem, liftListItem, sinkListItem } from 'prosemirror-schema-list'; // Import from prosemirror-schema-list
import { keymap } from 'prosemirror-keymap';
import { baseKeymap, chainCommands } from 'prosemirror-commands';
import { DOMParser, DOMSerializer, Schema, Fragment } from 'prosemirror-model';
import { Editor } from '@tiptap/core';
import CodeBlockLowlight from '@tiptap/extension-code-block-lowlight';
import Placeholder from '@tiptap/extension-placeholder';
import Highlight from '@tiptap/extension-highlight';
import Typography from '@tiptap/extension-typography';
import StarterKit from '@tiptap/starter-kit';
import { all, createLowlight } from 'lowlight';
import { PASTED_TEXT_CHARACTER_LIMIT } from '$lib/constants';
// create a lowlight instance with all languages loaded
const lowlight = createLowlight(all);
export let className = 'input-prose';
export let placeholder = 'Type here...';
export let value = '';
export let id = '';
export let messageInput = false;
export let shiftEnter = false;
export let largeTextAsFile = false;
export let id = '';
export let value = '';
export let placeholder = 'Type here...';
export let trim = false;
let element;
let editor;
let element: HTMLElement; // Element where ProseMirror will attach
let state;
let view;
// Plugin to add placeholder when the content is empty
function placeholderPlugin(placeholder: string) {
return new Plugin({
props: {
decorations(state) {
const doc = state.doc;
if (
doc.childCount === 1 &&
doc.firstChild.isTextblock &&
doc.firstChild?.textContent === ''
) {
// If there's nothing in the editor, show the placeholder decoration
const decoration = Decoration.node(0, doc.content.size, {
'data-placeholder': placeholder,
class: 'placeholder'
});
return DecorationSet.create(doc, [decoration]);
}
return DecorationSet.empty;
}
}
});
}
function unescapeMarkdown(text: string): string {
return text
.replace(/\\([\\`*{}[\]()#+\-.!_>])/g, '$1') // unescape backslashed characters
.replace(/&amp;/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/&quot;/g, '"')
.replace(/&#39;/g, "'");
}
// Custom parsing rule that creates proper paragraphs for newlines and empty lines
function markdownToProseMirrorDoc(markdown: string) {
// Split the markdown into lines
const lines = markdown.split('\n\n');
// Create an array to hold our paragraph nodes
const paragraphs = [];
// Process each line
lines.forEach((line) => {
if (line.trim() === '') {
// For empty lines, create an empty paragraph
paragraphs.push(schema.nodes.paragraph.create());
} else {
// For non-empty lines, parse as usual
const doc = defaultMarkdownParser.parse(line);
// Extract the content of the parsed document
doc.content.forEach((node) => {
paragraphs.push(node);
});
}
});
// Create a new document with these paragraphs
return schema.node('doc', null, paragraphs);
}
// Create a custom serializer for paragraphs
// Custom paragraph serializer to preserve newlines for empty paragraphs (empty block).
function serializeParagraph(state, node: Node) {
const content = node.textContent.trim();
// If the paragraph is empty, just add an empty line.
if (content === '') {
state.write('\n\n');
} else {
state.renderInline(node);
state.closeBlock(node);
}
}
const customMarkdownSerializer = new defaultMarkdownSerializer.constructor(
{
...defaultMarkdownSerializer.nodes,
paragraph: (state, node) => {
serializeParagraph(state, node); // Use custom paragraph serialization
}
// Customize other block formats if needed
},
// Copy marks directly from the original serializer (or customize them if necessary)
defaultMarkdownSerializer.marks
);
// Utility function to convert ProseMirror content back to markdown text
function serializeEditorContent(doc) {
const markdown = customMarkdownSerializer.serialize(doc);
if (trim) {
return unescapeMarkdown(markdown).trim();
} else {
return unescapeMarkdown(markdown);
}
}
// ---- Input Rules ----
// Input rule for heading (e.g., # Headings)
function headingRule(schema) {
return textblockTypeInputRule(/^(#{1,6})\s$/, schema.nodes.heading, (match) => ({
level: match[1].length
}));
}
// Input rule for bullet list (e.g., `- item`)
function bulletListRule(schema) {
return wrappingInputRule(/^\s*([-+*])\s$/, schema.nodes.bullet_list);
}
// Input rule for ordered list (e.g., `1. item`)
function orderedListRule(schema) {
return wrappingInputRule(/^(\d+)\.\s$/, schema.nodes.ordered_list, (match) => ({
order: +match[1]
}));
}
// Custom input rules for Bold/Italic (using * or _)
function markInputRule(regexp: RegExp, markType: any) {
return new InputRule(regexp, (state, match, start, end) => {
const { tr } = state;
if (match) {
tr.replaceWith(start, end, schema.text(match[1], [markType.create()]));
}
return tr;
});
}
function boldRule(schema) {
return markInputRule(/(?<=^|\s)\*([^*]+)\*(?=\s|$)/, schema.marks.strong);
}
function italicRule(schema) {
// Using lookbehind and lookahead to prevent the space from being consumed
return markInputRule(/(?<=^|\s)_([^*_]+)_(?=\s|$)/, schema.marks.em);
}
// Initialize Editor State and View
function afterSpacePress(state, dispatch) {
// Get the position right after the space was naturally inserted by the browser.
let { from, to, empty } = state.selection;
if (dispatch && empty) {
let tr = state.tr;
// Check for any active marks at `from - 1` (the space we just inserted)
const storedMarks = state.storedMarks || state.selection.$from.marks();
const hasBold = storedMarks.some((mark) => mark.type === state.schema.marks.strong);
const hasItalic = storedMarks.some((mark) => mark.type === state.schema.marks.em);
// Remove marks from the space character (marks applied to the space character will be marked as false)
if (hasBold) {
tr = tr.removeMark(from - 1, from, state.schema.marks.strong);
}
if (hasItalic) {
tr = tr.removeMark(from - 1, from, state.schema.marks.em);
}
// Dispatch the resulting transaction to update the editor state
dispatch(tr);
}
return true;
}
function toggleMark(markType) {
return (state, dispatch) => {
const { from, to } = state.selection;
if (state.doc.rangeHasMark(from, to, markType)) {
if (dispatch) dispatch(state.tr.removeMark(from, to, markType));
return true;
} else {
if (dispatch) dispatch(state.tr.addMark(from, to, markType.create()));
return true;
}
};
}
function isInList(state) {
const { $from } = state.selection;
return (
$from.parent.type === schema.nodes.paragraph && $from.node(-1).type === schema.nodes.list_item
);
}
function isEmptyListItem(state) {
const { $from } = state.selection;
return isInList(state) && $from.parent.content.size === 0 && $from.node(-1).childCount === 1;
}
function exitList(state, dispatch) {
return liftListItem(schema.nodes.list_item)(state, dispatch);
}
const options = {
throwOnError: false
};
// Function to find the next template in the document
function findNextTemplate(doc, from = 0) {
const patterns = [
{ start: '[', end: ']' },
@@ -270,6 +75,7 @@
return result;
}
// Function to select the next template in the document
function selectNextTemplate(state, dispatch) {
const { doc, selection } = state;
const from = selection.to;
@@ -290,220 +96,203 @@
return false;
}
// Replace tabs with four spaces
function handleTabIndentation(text: string): string {
// Replace each tab character with four spaces
return text.replace(/\t/g, ' ');
}
export const setContent = (content) => {
editor.commands.setContent(content);
};
onMount(() => {
const initialDoc = markdownToProseMirrorDoc(value || ''); // Convert the initial content
const selectTemplate = () => {
if (value !== '') {
// After updating the state, try to find and select the next template
setTimeout(() => {
const templateFound = selectNextTemplate(editor.view.state, editor.view.dispatch);
if (!templateFound) {
// If no template found, set cursor at the end
const endPos = editor.view.state.doc.content.size;
editor.view.dispatch(
editor.view.state.tr.setSelection(TextSelection.create(editor.view.state.doc, endPos))
);
}
}, 0);
}
};
state = EditorState.create({
doc: initialDoc,
schema,
plugins: [
history(),
placeholderPlugin(placeholder),
inputRules({
rules: [
headingRule(schema), // Handle markdown-style headings (# H1, ## H2, etc.)
bulletListRule(schema), // Handle `-` or `*` input to start bullet list
orderedListRule(schema), // Handle `1.` input to start ordered list
boldRule(schema), // Bold input rule
italicRule(schema) // Italic input rule
]
onMount(async () => {
async function tryParse(value, attempts = 3, interval = 100) {
try {
// Try parsing the value
return marked.parse(value);
} catch (error) {
// If no attempts remain, fallback to plain text
if (attempts <= 1) {
return value;
}
// Wait for the interval, then retry
await new Promise((resolve) => setTimeout(resolve, interval));
return tryParse(value, attempts - 1, interval); // Recursive call
}
}
// Usage example
let content = await tryParse(value);
editor = new Editor({
element: element,
extensions: [
StarterKit,
CodeBlockLowlight.configure({
lowlight
}),
keymap({
...baseKeymap,
'Mod-z': undo,
'Mod-y': redo,
Enter: (state, dispatch, view) => {
if (shiftEnter) {
eventDispatch('enter');
return true;
}
return chainCommands(
(state, dispatch, view) => {
if (isEmptyListItem(state)) {
return exitList(state, dispatch);
}
return false;
},
(state, dispatch, view) => {
if (isInList(state)) {
return splitListItem(schema.nodes.list_item)(state, dispatch);
}
return false;
},
baseKeymap.Enter
)(state, dispatch, view);
},
Highlight,
Typography,
Placeholder.configure({ placeholder })
],
content: content,
autofocus: true,
onTransaction: () => {
// force re-render so `editor.isActive` works as expected
editor = editor;
'Shift-Enter': (state, dispatch, view) => {
if (shiftEnter) {
return chainCommands(
(state, dispatch, view) => {
if (isEmptyListItem(state)) {
return exitList(state, dispatch);
}
return false;
},
(state, dispatch, view) => {
if (isInList(state)) {
return splitListItem(schema.nodes.list_item)(state, dispatch);
}
return false;
},
baseKeymap.Enter
)(state, dispatch, view);
} else {
return baseKeymap.Enter(state, dispatch, view);
}
const newValue = turndownService.turndown(editor.getHTML());
if (value !== newValue) {
value = newValue; // Trigger parent updates
}
},
editorProps: {
attributes: { id },
handleDOMEvents: {
focus: (view, event) => {
eventDispatch('focus', { event });
return false;
},
keypress: (view, event) => {
eventDispatch('keypress', { event });
return false;
},
// Prevent default tab navigation and provide indent/outdent behavior inside lists:
Tab: chainCommands((state, dispatch, view) => {
const { $from } = state.selection;
if (isInList(state)) {
return sinkListItem(schema.nodes.list_item)(state, dispatch);
} else {
return selectNextTemplate(state, dispatch);
keydown: (view, event) => {
// Handle Tab Key
if (event.key === 'Tab') {
const handled = selectNextTemplate(view.state, view.dispatch);
if (handled) {
event.preventDefault();
return true;
}
}
return true; // Prevent Tab from moving the focus
}),
'Shift-Tab': (state, dispatch, view) => {
const { $from } = state.selection;
if (isInList(state)) {
return liftListItem(schema.nodes.list_item)(state, dispatch);
}
return true; // Prevent Shift-Tab from moving the focus
},
'Mod-b': toggleMark(schema.marks.strong),
'Mod-i': toggleMark(schema.marks.em)
})
]
});
view = new EditorView(element, {
state,
dispatchTransaction(transaction) {
// Update editor state
let newState = view.state.apply(transaction);
view.updateState(newState);
if (messageInput) {
if (event.key === 'Enter') {
// Check if the current selection is inside a structured block (like codeBlock or list)
const { state } = view;
const { $head } = state.selection;
value = serializeEditorContent(newState.doc); // Convert ProseMirror content to markdown text
eventDispatch('input', { value });
},
handleDOMEvents: {
focus: (view, event) => {
eventDispatch('focus', { event });
return false;
},
keypress: (view, event) => {
eventDispatch('keypress', { event });
return false;
},
keydown: (view, event) => {
eventDispatch('keydown', { event });
return false;
},
paste: (view, event) => {
if (event.clipboardData) {
// Extract plain text from clipboard and paste it without formatting
const plainText = event.clipboardData.getData('text/plain');
if (plainText) {
if (largeTextAsFile) {
if (plainText.length > PASTED_TEXT_CHARACTER_LIMIT) {
// Dispatch paste event to parent component
eventDispatch('paste', { event });
// Recursive function to check ancestors for specific node types
function isInside(nodeTypes: string[]): boolean {
let currentNode = $head;
while (currentNode) {
if (nodeTypes.includes(currentNode.parent.type.name)) {
return true;
}
if (!currentNode.depth) break; // Stop if we reach the top
currentNode = state.doc.resolve(currentNode.before()); // Move to the parent node
}
return false;
}
const isInCodeBlock = isInside(['codeBlock']);
const isInList = isInside(['listItem', 'bulletList', 'orderedList']);
const isInHeading = isInside(['heading']);
if (isInCodeBlock || isInList || isInHeading) {
// Let ProseMirror handle the normal Enter behavior
return false;
}
}
// Handle shift + Enter for a line break
if (shiftEnter) {
if (event.key === 'Enter' && event.shiftKey) {
editor.commands.setHardBreak(); // Insert a hard break
view.dispatch(view.state.tr.scrollIntoView()); // Move viewport to the cursor
event.preventDefault();
return true;
}
if (event.key === 'Enter') {
eventDispatch('enter', { event });
event.preventDefault();
return true;
}
}
if (event.key === 'Enter') {
eventDispatch('enter', { event });
event.preventDefault();
return true;
}
}
eventDispatch('keydown', { event });
return false;
},
paste: (view, event) => {
if (event.clipboardData) {
// Extract plain text from clipboard and paste it without formatting
const plainText = event.clipboardData.getData('text/plain');
if (plainText) {
if (largeTextAsFile) {
if (plainText.length > PASTED_TEXT_CHARACTER_LIMIT) {
// Dispatch paste event to parent component
eventDispatch('paste', { event });
event.preventDefault();
return true;
}
}
return false;
}
const modifiedText = handleTabIndentation(plainText);
console.log(modifiedText);
// Replace the current selection with the plain text content
const tr = view.state.tr.replaceSelectionWith(
view.state.schema.text(modifiedText),
false
// Check if the pasted content contains image files
const hasImageFile = Array.from(event.clipboardData.files).some((file) =>
file.type.startsWith('image/')
);
view.dispatch(tr.scrollIntoView());
event.preventDefault(); // Prevent the default paste behavior
return true;
// Check for image in dataTransfer items (for cases where files are not available)
const hasImageItem = Array.from(event.clipboardData.items).some((item) =>
item.type.startsWith('image/')
);
if (hasImageFile) {
// If there's an image, dispatch the event to the parent
eventDispatch('paste', { event });
event.preventDefault();
return true;
}
if (hasImageItem) {
// If there's an image item, dispatch the event to the parent
eventDispatch('paste', { event });
event.preventDefault();
return true;
}
}
// Check if the pasted content contains image files
const hasImageFile = Array.from(event.clipboardData.files).some((file) =>
file.type.startsWith('image/')
);
// Check for image in dataTransfer items (for cases where files are not available)
const hasImageItem = Array.from(event.clipboardData.items).some((item) =>
item.type.startsWith('image/')
);
if (hasImageFile) {
// If there's an image, dispatch the event to the parent
eventDispatch('paste', { event });
event.preventDefault();
return true;
}
if (hasImageItem) {
// If there's an image item, dispatch the event to the parent
eventDispatch('paste', { event });
event.preventDefault();
return true;
}
// For all other cases (text, formatted text, etc.), let ProseMirror handle it
view.dispatch(view.state.tr.scrollIntoView()); // Move viewport to the cursor after pasting
return false;
}
// For all other cases (text, formatted text, etc.), let ProseMirror handle it
return false;
},
// Handle space input after browser has completed it
keyup: (view, event) => {
if (event.key === ' ' && event.code === 'Space') {
afterSpacePress(view.state, view.dispatch);
}
return false;
}
},
attributes: { id }
}
});
selectTemplate();
});
// Reinitialize the editor if the value is externally changed (i.e. when `value` is updated)
$: if (view && value !== serializeEditorContent(view.state.doc)) {
const newDoc = markdownToProseMirrorDoc(value || '');
const newState = EditorState.create({
doc: newDoc,
schema,
plugins: view.state.plugins,
selection: TextSelection.atEnd(newDoc) // This sets the cursor at the end
});
view.updateState(newState);
if (value !== '') {
// After updating the state, try to find and select the next template
setTimeout(() => {
const templateFound = selectNextTemplate(view.state, view.dispatch);
if (!templateFound) {
// If no template found, set cursor at the end
const endPos = view.state.doc.content.size;
view.dispatch(view.state.tr.setSelection(TextSelection.create(view.state.doc, endPos)));
}
}, 0);
}
}
// Destroy ProseMirror instance on unmount
onDestroy(() => {
view?.destroy();
if (editor) {
editor.destroy();
}
});
// Update the editor content if the external `value` changes
$: if (editor && value !== turndownService.turndown(editor.getHTML())) {
editor.commands.setContent(marked.parse(value)); // Update editor content
selectTemplate();
}
</script>
<div bind:this={element} class="relative w-full min-w-full h-full min-h-fit {className}"></div>
<div bind:this={element} class="relative w-full min-w-full h-full min-h-fit {className}" />
@@ -165,12 +165,14 @@
<div class="mt-3 flex justify-between">
<div class="text-xs text-gray-500">
<Tooltip
content={item?.user?.email}
content={item?.user?.email ?? $i18n.t('Deleted User')}
className="flex shrink-0"
placement="top-start"
>
{$i18n.t('By {{name}}', {
name: capitalizeFirstLetter(item?.user?.name ?? item?.user?.email)
name: capitalizeFirstLetter(
item?.user?.name ?? item?.user?.email ?? $i18n.t('Deleted User')
)
})}
</Tooltip>
</div>
@@ -68,7 +68,7 @@
let inputFiles = null;
let filteredItems = [];
$: if (knowledge) {
$: if (knowledge && knowledge.files) {
fuse = new Fuse(knowledge.files, {
keys: ['meta.name', 'meta.description']
});
+8 -2
View File
@@ -279,10 +279,16 @@
<div class="flex justify-between items-center -mb-0.5 px-0.5">
<div class=" text-xs mt-0.5">
<Tooltip content={model?.user?.email} className="flex shrink-0" placement="top-start">
<Tooltip
content={model?.user?.email ?? $i18n.t('Deleted User')}
className="flex shrink-0"
placement="top-start"
>
<div class="shrink-0 text-gray-500">
{$i18n.t('By {{name}}', {
name: capitalizeFirstLetter(model?.user?.name ?? model?.user?.email)
name: capitalizeFirstLetter(
model?.user?.name ?? model?.user?.email ?? $i18n.t('Deleted User')
)
})}
</div>
</Tooltip>
@@ -210,9 +210,6 @@
}
});
capabilities = { ...capabilities, ...(model?.meta?.capabilities ?? {}) };
if (model?.owned_by === 'openai') {
capabilities.usage = false;
}
if ('access_control' in model) {
accessControl = model.access_control;
+4 -2
View File
@@ -155,13 +155,15 @@
<div class=" text-xs px-0.5">
<Tooltip
content={prompt?.user?.email}
content={prompt?.user?.email ?? $i18n.t('Deleted User')}
className="flex shrink-0"
placement="top-start"
>
<div class="shrink-0 text-gray-500">
{$i18n.t('By {{name}}', {
name: capitalizeFirstLetter(prompt?.user?.name ?? prompt?.user?.email)
name: capitalizeFirstLetter(
prompt?.user?.name ?? prompt?.user?.email ?? $i18n.t('Deleted User')
)
})}
</div>
</Tooltip>
+4 -2
View File
@@ -251,12 +251,14 @@
<div class="text-xs text-gray-500 shrink-0">
<Tooltip
content={tool?.user?.email}
content={tool?.user?.email ?? $i18n.t('Deleted User')}
className="flex shrink-0"
placement="top-start"
>
{$i18n.t('By {{name}}', {
name: capitalizeFirstLetter(tool?.user?.name ?? tool?.user?.email)
name: capitalizeFirstLetter(
tool?.user?.name ?? tool?.user?.email ?? $i18n.t('Deleted User')
)
})}
</Tooltip>
</div>
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "",
"Already have an account?": "هل تملك حساب ؟",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "مساعد",
"and": "و",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 الرابط مطلوب",
"Available list": "",
"available!": "متاح",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "خلف",
@@ -234,6 +236,7 @@
"Delete User": "حذف المستخدم",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} حذف",
"Deleted {{name}}": "حذف {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "وصف",
"Didn't fully follow instructions": "لم أتبع التعليمات بشكل كامل",
@@ -326,6 +329,7 @@
"Enter language codes": "أدخل كود اللغة",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "(e.g. {{modelTag}}) أدخل الموديل تاق",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "(e.g. 50) أدخل عدد الخطوات",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "أخفاء",
"Host": "",
"How can I help you today?": "كيف استطيع مساعدتك اليوم؟",
"How would you rate this response?": "",
"Hybrid Search": "البحث الهجين",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "محتوى الملف النموذجي",
"Models": "الموديلات",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "المزيد",
"Name": "الأسم",
@@ -981,6 +987,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "",
"Why?": "",
"Widescreen Mode": "",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "",
"Already have an account?": "Вече имате акаунт? ",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "асистент",
"and": "и",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 Базов URL е задължителен.",
"Available list": "",
"available!": "наличен!",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "Назад",
@@ -234,6 +236,7 @@
"Delete User": "Изтриване на потребител",
"Deleted {{deleteModelTag}}": "Изтрито {{deleteModelTag}}",
"Deleted {{name}}": "Изтрито {{име}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Описание",
"Didn't fully follow instructions": "Не следва инструкциите",
@@ -326,6 +329,7 @@
"Enter language codes": "Въведете кодове на езика",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "Въведете таг на модел (напр. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Въведете брой стъпки (напр. 50)",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "Скрий",
"Host": "",
"How can I help you today?": "Как мога да ви помогна днес?",
"How would you rate this response?": "",
"Hybrid Search": "Hybrid Search",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "Съдържание на модфайл",
"Models": "Модели",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "Повече",
"Name": "Име",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "",
"Why?": "",
"Widescreen Mode": "",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "",
"Already have an account?": "আগে থেকেই একাউন্ট আছে?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "একটা এসিস্ট্যান্ট",
"and": "এবং",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 বেজ ইউআরএল আবশ্যক",
"Available list": "",
"available!": "উপলব্ধ!",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "পেছনে",
@@ -234,6 +236,7 @@
"Delete User": "ইউজার মুছে ফেলুন",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} মুছে ফেলা হয়েছে",
"Deleted {{name}}": "{{name}} মোছা হয়েছে",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "বিবরণ",
"Didn't fully follow instructions": "ইনস্ট্রাকশন সম্পূর্ণ অনুসরণ করা হয়নি",
@@ -326,6 +329,7 @@
"Enter language codes": "ল্যাঙ্গুয়েজ কোড লিখুন",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "মডেল ট্যাগ লিখুন (e.g. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "ধাপের সংখ্যা দিন (যেমন: 50)",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "লুকান",
"Host": "",
"How can I help you today?": "আপনাকে আজ কিভাবে সাহায্য করতে পারি?",
"How would you rate this response?": "",
"Hybrid Search": "হাইব্রিড অনুসন্ধান",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "মডেলফাইল কনটেন্ট",
"Models": "মডেলসমূহ",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "আরো",
"Name": "নাম",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "",
"Why?": "",
"Widescreen Mode": "",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "Permetre la interrupció de la veu en una trucada",
"Already have an account?": "Ja tens un compte?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "Alternativa al top_p, i pretén garantir un equilibri de qualitat i varietat. El paràmetre p representa la probabilitat mínima que es consideri un token, en relació amb la probabilitat del token més probable. Per exemple, amb p=0,05 i el token més probable amb una probabilitat de 0,9, es filtren els logits amb un valor inferior a 0,045. (Per defecte: 0.0)",
"Amazing": "",
"an assistant": "un assistent",
"and": "i",
"and {{COUNT}} more": "i {{COUNT}} més",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "Es requereix l'URL Base d'AUTOMATIC1111.",
"Available list": "Llista de disponibles",
"available!": "disponible!",
"Awful": "",
"Azure AI Speech": "Azure AI Speech",
"Azure Region": "Regió d'Azure",
"Back": "Enrere",
@@ -234,6 +236,7 @@
"Delete User": "Eliminar usuari",
"Deleted {{deleteModelTag}}": "S'ha eliminat {{deleteModelTag}}",
"Deleted {{name}}": "S'ha eliminat {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "Descriu la teva base de coneixement i objectius",
"Description": "Descripció",
"Didn't fully follow instructions": "No s'han seguit les instruccions completament",
@@ -326,6 +329,7 @@
"Enter language codes": "Introdueix els codis de llenguatge",
"Enter Model ID": "Introdueix l'identificador del model",
"Enter model tag (e.g. {{modelTag}})": "Introdueix l'etiqueta del model (p. ex. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Introdueix el nombre de passos (p. ex. 50)",
"Enter Sampler (e.g. Euler a)": "Introdueix el mostrejador (p.ex. Euler a)",
"Enter Scheduler (e.g. Karras)": "Entra el programador (p.ex. Karras)",
@@ -449,6 +453,7 @@
"Hide": "Amaga",
"Host": "Servidor",
"How can I help you today?": "Com et puc ajudar avui?",
"How would you rate this response?": "",
"Hybrid Search": "Cerca híbrida",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Afirmo que he llegit i entenc les implicacions de la meva acció. Soc conscient dels riscos associats a l'execució de codi arbitrari i he verificat la fiabilitat de la font.",
"ID": "ID",
@@ -565,6 +570,7 @@
"Modelfile Content": "Contingut del Modelfile",
"Models": "Models",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "més",
"More": "Més",
"Name": "Nom",
@@ -978,6 +984,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "Quan està activat, el model respondrà a cada missatge de xat en temps real, generant una resposta tan bon punt l'usuari envia un missatge. Aquest mode és útil per a aplicacions de xat en directe, però pot afectar el rendiment en maquinari més lent.",
"wherever you are": "allà on estiguis",
"Whisper (Local)": "Whisper (local)",
"Why?": "",
"Widescreen Mode": "Mode de pantalla ampla",
"Won": "Ha guanyat",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "Funciona juntament amb top-k. Un valor més alt (p. ex., 0,95) donarà lloc a un text més divers, mentre que un valor més baix (p. ex., 0,5) generarà un text més concentrat i conservador. (Per defecte: 0,9)",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "",
"Already have an account?": "Naa na kay account ?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "usa ka katabang",
"and": "Ug",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "Ang AUTOMATIC1111 base URL gikinahanglan.",
"Available list": "",
"available!": "magamit!",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "Balik",
@@ -234,6 +236,7 @@
"Delete User": "",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} gipapas",
"Deleted {{name}}": "",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Deskripsyon",
"Didn't fully follow instructions": "",
@@ -326,6 +329,7 @@
"Enter language codes": "",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "Pagsulod sa template tag (e.g. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Pagsulod sa gidaghanon sa mga lakang (e.g. 50)",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "Tagoa",
"Host": "",
"How can I help you today?": "Unsaon nako pagtabang kanimo karon?",
"How would you rate this response?": "",
"Hybrid Search": "",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "Mga sulod sa template file",
"Models": "Mga modelo",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "",
"Name": "Ngalan",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "",
"Why?": "",
"Widescreen Mode": "",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "Povolit přerušení hlasu při hovoru",
"Already have an account?": "Už máte účet?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "asistent",
"and": "a",
"and {{COUNT}} more": "a {{COUNT}} dalších",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "Vyžaduje se základní URL pro AUTOMATIC1111.",
"Available list": "Dostupný seznam",
"available!": "k dispozici!",
"Awful": "",
"Azure AI Speech": "Azure AI syntéza řeči",
"Azure Region": "Azure oblast",
"Back": "Zpět",
@@ -234,6 +236,7 @@
"Delete User": "Smazat uživatele",
"Deleted {{deleteModelTag}}": "Smazáno {{deleteModelTag}}",
"Deleted {{name}}": "Smazáno {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Popis",
"Didn't fully follow instructions": "Nenásledovali jste přesně všechny instrukce.",
@@ -326,6 +329,7 @@
"Enter language codes": "Zadejte kódy jazyků",
"Enter Model ID": "Zadejte ID modelu",
"Enter model tag (e.g. {{modelTag}})": "Zadejte označení modelu (např. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Zadejte počet kroků (např. 50)",
"Enter Sampler (e.g. Euler a)": "Zadejte vzorkovač (např. Euler a)",
"Enter Scheduler (e.g. Karras)": "Zadejte plánovač (např. Karras)",
@@ -449,6 +453,7 @@
"Hide": "Schovej",
"Host": "",
"How can I help you today?": "Jak vám mohu dnes pomoci?",
"How would you rate this response?": "",
"Hybrid Search": "Hybridní vyhledávání",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Beru na vědomí, že jsem si přečetl a chápu důsledky svých činů. Jsem si vědom rizik spojených s vykonáváním libovolného kódu a ověřil jsem důvěryhodnost zdroje.",
"ID": "ID",
@@ -565,6 +570,7 @@
"Modelfile Content": "Obsah souboru modelfile",
"Models": "Modely",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "více",
"More": "Více",
"Name": "Jméno",
@@ -979,6 +985,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "Whisper (Lokálně)",
"Why?": "",
"Widescreen Mode": "Režim širokoúhlého zobrazení",
"Won": "Vyhrál",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "Tillad afbrydelser i stemme i opkald",
"Already have an account?": "Har du allerede en profil?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "en assistent",
"and": "og",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 Base URL er påkrævet.",
"Available list": "Tilgængelige lister",
"available!": "tilgængelig!",
"Awful": "",
"Azure AI Speech": "Azure AI Speech",
"Azure Region": "Azure Region",
"Back": "Tilbage",
@@ -234,6 +236,7 @@
"Delete User": "Slet bruger",
"Deleted {{deleteModelTag}}": "Slettede {{deleteModelTag}}",
"Deleted {{name}}": "Slettede {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Beskrivelse",
"Didn't fully follow instructions": "Fulgte ikke instruktioner",
@@ -326,6 +329,7 @@
"Enter language codes": "Indtast sprogkoder",
"Enter Model ID": "Indtast model-ID",
"Enter model tag (e.g. {{modelTag}})": "Indtast modelmærke (f.eks. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Indtast antal trin (f.eks. 50)",
"Enter Sampler (e.g. Euler a)": "Indtast sampler (f.eks. Euler a)",
"Enter Scheduler (e.g. Karras)": "Indtast scheduler (f.eks. Karras)",
@@ -449,6 +453,7 @@
"Hide": "Skjul",
"Host": "",
"How can I help you today?": "Hvordan kan jeg hjælpe dig i dag?",
"How would you rate this response?": "",
"Hybrid Search": "Hybrid søgning",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Jeg anerkender, at jeg har læst og forstået konsekvenserne af min handling. Jeg er opmærksom på de risici, der er forbundet med at udføre vilkårlig kode, og jeg har verificeret kildens troværdighed.",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "Modelfilindhold",
"Models": "Modeller",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "Mere",
"Name": "Navn",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "Whisper (lokal)",
"Why?": "",
"Widescreen Mode": "Widescreen-tilstand",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "Unterbrechung durch Stimme im Anruf zulassen",
"Already have an account?": "Haben Sie bereits einen Account?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "ein Assistent",
"and": "und",
"and {{COUNT}} more": "und {{COUNT}} mehr",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111-Basis-URL ist erforderlich.",
"Available list": "Verfügbare Liste",
"available!": "Verfügbar!",
"Awful": "",
"Azure AI Speech": "Azure AI Speech",
"Azure Region": "Azure-Region",
"Back": "Zurück",
@@ -234,6 +236,7 @@
"Delete User": "Benutzer löschen",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} gelöscht",
"Deleted {{name}}": "{{name}} gelöscht",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Beschreibung",
"Didn't fully follow instructions": "Nicht genau den Answeisungen gefolgt",
@@ -326,6 +329,7 @@
"Enter language codes": "Geben Sie die Sprachcodes ein",
"Enter Model ID": "Geben Sie die Modell-ID ein",
"Enter model tag (e.g. {{modelTag}})": "Gebn Sie den Model-Tag ein",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Geben Sie die Anzahl an Schritten ein (z. B. 50)",
"Enter Sampler (e.g. Euler a)": "Geben Sie den Sampler ein (z. B. Euler a)",
"Enter Scheduler (e.g. Karras)": "Geben Sie den Scheduler ein (z. B. Karras)",
@@ -449,6 +453,7 @@
"Hide": "Verbergen",
"Host": "",
"How can I help you today?": "Wie kann ich Ihnen heute helfen?",
"How would you rate this response?": "",
"Hybrid Search": "Hybride Suche",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Ich bestätige, dass ich gelesen habe und die Auswirkungen meiner Aktion verstehe. Mir sind die Risiken bewusst, die mit der Ausführung beliebigen Codes verbunden sind, und ich habe die Vertrauenswürdigkeit der Quelle überprüft.",
"ID": "ID",
@@ -565,6 +570,7 @@
"Modelfile Content": "Modelfile-Inhalt",
"Models": "Modelle",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "mehr",
"More": "Mehr",
"Name": "Name",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "Whisper (lokal)",
"Why?": "",
"Widescreen Mode": "Breitbildmodus",
"Won": "Gewonnen",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "",
"Already have an account?": "Such account exists?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "such assistant",
"and": "and",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 Base URL is required.",
"Available list": "",
"available!": "available! So excite!",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "Back",
@@ -234,6 +236,7 @@
"Delete User": "",
"Deleted {{deleteModelTag}}": "Deleted {{deleteModelTag}}",
"Deleted {{name}}": "",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Description",
"Didn't fully follow instructions": "",
@@ -326,6 +329,7 @@
"Enter language codes": "",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "Enter model doge tag (e.g. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Enter Number of Steps (e.g. 50)",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "Hide",
"Host": "",
"How can I help you today?": "How can I halp u today?",
"How would you rate this response?": "",
"Hybrid Search": "",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "Modelfile Content",
"Models": "Wowdels",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "",
"Name": "Name",
@@ -979,6 +985,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "",
"Why?": "",
"Widescreen Mode": "",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "",
"Already have an account?": "",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "",
"and": "",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "",
"Available list": "",
"available!": "",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "",
@@ -234,6 +236,7 @@
"Delete User": "",
"Deleted {{deleteModelTag}}": "",
"Deleted {{name}}": "",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "",
"Didn't fully follow instructions": "",
@@ -326,6 +329,7 @@
"Enter language codes": "",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "",
"Host": "",
"How can I help you today?": "",
"How would you rate this response?": "",
"Hybrid Search": "",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "",
"Models": "",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "",
"Name": "",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "",
"Why?": "",
"Widescreen Mode": "",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "",
"Already have an account?": "",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "",
"and": "",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "",
"Available list": "",
"available!": "",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "",
@@ -234,6 +236,7 @@
"Delete User": "",
"Deleted {{deleteModelTag}}": "",
"Deleted {{name}}": "",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "",
"Didn't fully follow instructions": "",
@@ -326,6 +329,7 @@
"Enter language codes": "",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "",
"Host": "",
"How can I help you today?": "",
"How would you rate this response?": "",
"Hybrid Search": "",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "",
"Models": "",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "",
"Name": "",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "",
"Why?": "",
"Widescreen Mode": "",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "Permitir interrupción de voz en llamada",
"Already have an account?": "¿Ya tienes una cuenta?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "un asistente",
"and": "y",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "La dirección URL de AUTOMATIC1111 es requerida.",
"Available list": "Lista disponible",
"available!": "¡disponible!",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "Región de Azure",
"Back": "Volver",
@@ -234,6 +236,7 @@
"Delete User": "Borrar Usuario",
"Deleted {{deleteModelTag}}": "Se borró {{deleteModelTag}}",
"Deleted {{name}}": "Eliminado {{nombre}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Descripción",
"Didn't fully follow instructions": "No siguió las instrucciones",
@@ -326,6 +329,7 @@
"Enter language codes": "Ingrese códigos de idioma",
"Enter Model ID": "Ingresa el ID del modelo",
"Enter model tag (e.g. {{modelTag}})": "Ingrese la etiqueta del modelo (p.ej. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Ingrese el número de pasos (p.ej., 50)",
"Enter Sampler (e.g. Euler a)": "Ingrese el sampler (p.ej., Euler a)",
"Enter Scheduler (e.g. Karras)": "Ingrese el planificador (p.ej., Karras)",
@@ -449,6 +453,7 @@
"Hide": "Esconder",
"Host": "",
"How can I help you today?": "¿Cómo puedo ayudarte hoy?",
"How would you rate this response?": "",
"Hybrid Search": "Búsqueda Híbrida",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Aseguro que he leído y entiendo las implicaciones de mi acción. Estoy consciente de los riesgos asociados con la ejecución de código arbitrario y he verificado la confianza de la fuente.",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "Contenido del Modelfile",
"Models": "Modelos",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "Más",
"Name": "Nombre",
@@ -978,6 +984,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "Whisper (Local)",
"Why?": "",
"Widescreen Mode": "Modo de pantalla ancha",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "",
"Already have an account?": "از قبل حساب کاربری دارید؟",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "یک دستیار",
"and": "و",
"and {{COUNT}} more": "و {{COUNT}} مورد دیگر",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "به URL پایه AUTOMATIC1111 مورد نیاز است.",
"Available list": "فهرست دردسترس",
"available!": "در دسترس!",
"Awful": "",
"Azure AI Speech": "سخنگوی هوش\u200cمصنوعی Azure",
"Azure Region": "منطقهٔ Azure",
"Back": "بازگشت",
@@ -234,6 +236,7 @@
"Delete User": "حذف کاربر",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} پاک شد",
"Deleted {{name}}": "حذف شده {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "توضیحات",
"Didn't fully follow instructions": "نمی تواند دستورالعمل را کامل پیگیری کند",
@@ -326,6 +329,7 @@
"Enter language codes": "کد زبان را وارد کنید",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "تگ مدل را وارد کنید (مثلا {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "تعداد گام ها را وارد کنید (مثال: 50)",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "پنهان\u200cسازی",
"Host": "",
"How can I help you today?": "امروز چطور می توانم کمک تان کنم؟",
"How would you rate this response?": "",
"Hybrid Search": "جستجوی همزمان",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "محتویات فایل مدل",
"Models": "مدل\u200cها",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "بیشتر",
"Name": "نام",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "",
"Why?": "",
"Widescreen Mode": "حالت صفحهٔ عریض",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "",
"Already have an account?": "Onko sinulla jo tili?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "avustaja",
"and": "ja",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111-perus-URL vaaditaan.",
"Available list": "",
"available!": "saatavilla!",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "Takaisin",
@@ -234,6 +236,7 @@
"Delete User": "Poista käyttäjä",
"Deleted {{deleteModelTag}}": "Poistettu {{deleteModelTag}}",
"Deleted {{name}}": "Poistettu {{nimi}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Kuvaus",
"Didn't fully follow instructions": "Ei noudattanut ohjeita täysin",
@@ -326,6 +329,7 @@
"Enter language codes": "Syötä kielikoodit",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "Syötä mallitagi (esim. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Syötä askelien määrä (esim. 50)",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "Piilota",
"Host": "",
"How can I help you today?": "Kuinka voin auttaa tänään?",
"How would you rate this response?": "",
"Hybrid Search": "Hybridihaku",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "Mallitiedoston sisältö",
"Models": "Mallit",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "Lisää",
"Name": "Nimi",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "",
"Why?": "",
"Widescreen Mode": "",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "Autoriser l'interruption vocale pendant un appel",
"Already have an account?": "Avez-vous déjà un compte ?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "un assistant",
"and": "et",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "L'URL de base {AUTOMATIC1111} est requise.",
"Available list": "",
"available!": "disponible !",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "Retour en arrière",
@@ -234,6 +236,7 @@
"Delete User": "Supprimer le compte d'utilisateur",
"Deleted {{deleteModelTag}}": "Supprimé {{deleteModelTag}}",
"Deleted {{name}}": "Supprimé {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Description",
"Didn't fully follow instructions": "N'a pas entièrement respecté les instructions",
@@ -326,6 +329,7 @@
"Enter language codes": "Entrez les codes de langue",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "Entrez l'étiquette du modèle (par ex. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Entrez le nombre de pas (par ex. 50)",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "Cacher",
"Host": "",
"How can I help you today?": "Comment puis-je vous être utile aujourd'hui ?",
"How would you rate this response?": "",
"Hybrid Search": "Recherche hybride",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "Contenu du Fichier de Modèle",
"Models": "Modèles",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "Plus de",
"Name": "Nom",
@@ -978,6 +984,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "Whisper (local)",
"Why?": "",
"Widescreen Mode": "Mode Grand Écran",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "Autoriser l'interruption vocale pendant un appel",
"Already have an account?": "Avez-vous déjà un compte ?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "un assistant",
"and": "et",
"and {{COUNT}} more": "et {{COUNT}} autres",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "L'URL de base {AUTOMATIC1111} est requise.",
"Available list": "Liste disponible",
"available!": "disponible !",
"Awful": "",
"Azure AI Speech": "Azure AI Speech",
"Azure Region": "Région Azure",
"Back": "Retour en arrière",
@@ -234,6 +236,7 @@
"Delete User": "Supprimer le compte d'utilisateur",
"Deleted {{deleteModelTag}}": "Supprimé {{deleteModelTag}}",
"Deleted {{name}}": "Supprimé {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Description",
"Didn't fully follow instructions": "N'a pas entièrement respecté les instructions",
@@ -326,6 +329,7 @@
"Enter language codes": "Entrez les codes de langue",
"Enter Model ID": "Entrez l'ID du modèle",
"Enter model tag (e.g. {{modelTag}})": "Entrez le tag du modèle (par ex. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Entrez le nombre d'étapes (par ex. 50)",
"Enter Sampler (e.g. Euler a)": "Entrez le sampler (par ex. Euler a)",
"Enter Scheduler (e.g. Karras)": "Entrez le planificateur (par ex. Karras)",
@@ -449,6 +453,7 @@
"Hide": "Cacher",
"Host": "",
"How can I help you today?": "Comment puis-je vous aider aujourd'hui ?",
"How would you rate this response?": "",
"Hybrid Search": "Recherche hybride",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Je reconnais avoir lu et compris les implications de mes actions. Je suis conscient des risques associés à l'exécution d'un code arbitraire et j'ai vérifié la fiabilité de la source.",
"ID": "ID",
@@ -565,6 +570,7 @@
"Modelfile Content": "Contenu du Fichier de Modèle",
"Models": "Modèles",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "plus",
"More": "Plus",
"Name": "Nom d'utilisateur",
@@ -978,6 +984,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "Whisper (local)",
"Why?": "",
"Widescreen Mode": "Mode grand écran",
"Won": "Gagné",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "",
"Already have an account?": "כבר יש לך חשבון?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "עוזר",
"and": "וגם",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "נדרשת כתובת URL בסיסית של AUTOMATIC1111",
"Available list": "",
"available!": "זמין!",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "חזור",
@@ -234,6 +236,7 @@
"Delete User": "מחק משתמש",
"Deleted {{deleteModelTag}}": "נמחק {{deleteModelTag}}",
"Deleted {{name}}": "נמחק {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "תיאור",
"Didn't fully follow instructions": "לא עקב אחרי ההוראות באופן מלא",
@@ -326,6 +329,7 @@
"Enter language codes": "הזן קודי שפה",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "הזן תג מודל (למשל {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "הזן מספר שלבים (למשל 50)",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "הסתר",
"Host": "",
"How can I help you today?": "כיצד אוכל לעזור לך היום?",
"How would you rate this response?": "",
"Hybrid Search": "חיפוש היברידי",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "תוכן קובץ מודל",
"Models": "מודלים",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "עוד",
"Name": "שם",
@@ -978,6 +984,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "",
"Why?": "",
"Widescreen Mode": "",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "",
"Already have an account?": "क्या आपके पास पहले से एक खाता मौजूद है?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "एक सहायक",
"and": "और",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 का बेस यूआरएल आवश्यक है।",
"Available list": "",
"available!": "उपलब्ध!",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "पीछे",
@@ -234,6 +236,7 @@
"Delete User": "उपभोक्ता मिटायें",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} हटा दिया गया",
"Deleted {{name}}": "{{name}} हटा दिया गया",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "विवरण",
"Didn't fully follow instructions": "निर्देशों का पूरी तरह से पालन नहीं किया",
@@ -326,6 +329,7 @@
"Enter language codes": "भाषा कोड दर्ज करें",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "Model tag दर्ज करें (उदा. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "चरणों की संख्या दर्ज करें (उदा. 50)",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "छुपाएं",
"Host": "",
"How can I help you today?": "आज मैं आपकी कैसे मदद कर सकता हूँ?",
"How would you rate this response?": "",
"Hybrid Search": "हाइब्रिड खोज",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "मॉडल फ़ाइल सामग्री",
"Models": "सभी मॉडल",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "और..",
"Name": "नाम",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "",
"Why?": "",
"Widescreen Mode": "",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "",
"Already have an account?": "Već imate račun?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "asistent",
"and": "i",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "Potreban je AUTOMATIC1111 osnovni URL.",
"Available list": "",
"available!": "dostupno!",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "Natrag",
@@ -234,6 +236,7 @@
"Delete User": "Izbriši korisnika",
"Deleted {{deleteModelTag}}": "Izbrisan {{deleteModelTag}}",
"Deleted {{name}}": "Izbrisano {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Opis",
"Didn't fully follow instructions": "Nije u potpunosti slijedio upute",
@@ -326,6 +329,7 @@
"Enter language codes": "Unesite kodove jezika",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "Unesite oznaku modela (npr. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Unesite broj koraka (npr. 50)",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "Sakrij",
"Host": "",
"How can I help you today?": "Kako vam mogu pomoći danas?",
"How would you rate this response?": "",
"Hybrid Search": "Hibridna pretraga",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "Sadržaj datoteke modela",
"Models": "Modeli",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "Više",
"Name": "Ime",
@@ -978,6 +984,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "Whisper (lokalno)",
"Why?": "",
"Widescreen Mode": "Mod širokog zaslona",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "Hang megszakítás engedélyezése hívás közben",
"Already have an account?": "Már van fiókod?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "egy asszisztens",
"and": "és",
"and {{COUNT}} more": "és még {{COUNT}} db",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 alap URL szükséges.",
"Available list": "Elérhető lista",
"available!": "elérhető!",
"Awful": "",
"Azure AI Speech": "Azure AI beszéd",
"Azure Region": "Azure régió",
"Back": "Vissza",
@@ -234,6 +236,7 @@
"Delete User": "Felhasználó törlése",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} törölve",
"Deleted {{name}}": "{{name}} törölve",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Leírás",
"Didn't fully follow instructions": "Nem követte teljesen az utasításokat",
@@ -326,6 +329,7 @@
"Enter language codes": "Add meg a nyelvi kódokat",
"Enter Model ID": "Add meg a modell azonosítót",
"Enter model tag (e.g. {{modelTag}})": "Add meg a modell címkét (pl. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Add meg a lépések számát (pl. 50)",
"Enter Sampler (e.g. Euler a)": "Add meg a mintavételezőt (pl. Euler a)",
"Enter Scheduler (e.g. Karras)": "Add meg az ütemezőt (pl. Karras)",
@@ -449,6 +453,7 @@
"Hide": "Elrejtés",
"Host": "",
"How can I help you today?": "Hogyan segíthetek ma?",
"How would you rate this response?": "",
"Hybrid Search": "Hibrid keresés",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Elismerem, hogy elolvastam és megértem a cselekedetem következményeit. Tisztában vagyok a tetszőleges kód végrehajtásával járó kockázatokkal, és ellenőriztem a forrás megbízhatóságát.",
"ID": "Azonosító",
@@ -565,6 +570,7 @@
"Modelfile Content": "Modellfájl tartalom",
"Models": "Modellek",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "több",
"More": "Több",
"Name": "Név",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "Whisper (helyi)",
"Why?": "",
"Widescreen Mode": "Szélesvásznú mód",
"Won": "Nyert",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "Izinkan Gangguan Suara dalam Panggilan",
"Already have an account?": "Sudah memiliki akun?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "asisten",
"and": "dan",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 URL Dasar diperlukan.",
"Available list": "",
"available!": "tersedia!",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "Kembali",
@@ -234,6 +236,7 @@
"Delete User": "Menghapus Pengguna",
"Deleted {{deleteModelTag}}": "Menghapus {{deleteModelTag}}",
"Deleted {{name}}": "Menghapus {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Deskripsi",
"Didn't fully follow instructions": "Tidak sepenuhnya mengikuti instruksi",
@@ -326,6 +329,7 @@
"Enter language codes": "Masukkan kode bahasa",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "Masukkan tag model (misalnya {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Masukkan Jumlah Langkah (mis. 50)",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "Sembunyikan",
"Host": "",
"How can I help you today?": "Ada yang bisa saya bantu hari ini?",
"How would you rate this response?": "",
"Hybrid Search": "Pencarian Hibrida",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "Konten File Model",
"Models": "Model",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "Lainnya",
"Name": "Nama",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "Bisikan (Lokal)",
"Why?": "",
"Widescreen Mode": "Mode Layar Lebar",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
+203 -196
View File
@@ -11,33 +11,33 @@
"A task model is used when performing tasks such as generating titles for chats and web search queries": "Úsáidtear samhail tasc agus tascanna á ndéanamh agat mar theidil a ghiniúint do chomhráite agus ceisteanna cuardaigh gréasáin",
"a user": "úsáideoir",
"About": "Maidir",
"Access": "",
"Access Control": "",
"Accessible to all users": "",
"Access": "Rochtain",
"Access Control": "Rialaithe Rochtana",
"Accessible to all users": "Inrochtana do gach úsáideoir",
"Account": "Cuntas",
"Account Activation Pending": "Gníomhachtaithe Cuntas",
"Accurate information": "Faisnéis chruinn",
"Actions": "Gníomhartha",
"Activate this command by typing \"/{{COMMAND}}\" to chat input.": "",
"Activate this command by typing \"/{{COMMAND}}\" to chat input.": "Gníomhachtaigh an t-ordú seo trí \"/{{COMMAND}}\" a chlóscríobh chun ionchur comhrá a dhéanamh.",
"Active Users": "Úsáideoirí Gníomhacha",
"Add": "Cuir",
"Add a model ID": "",
"Add a model ID": "Cuir ID samhail leis",
"Add a short description about what this model does": "Cuir cur síos gairid leis faoin méid a dhéanann an tsamhail seo",
"Add a tag": "Cuir clib leis",
"Add Arena Model": "Cuir Múnla Arena leis",
"Add Connection": "",
"Add Connection": "Cuir Ceangal leis",
"Add Content": "Cuir Ábhar leis",
"Add content here": "Cuir ábhar anseo",
"Add custom prompt": "Cuir pras saincheaptha leis",
"Add Files": "Cuir Comhaid",
"Add Group": "",
"Add Group": "Cuir Grúpa leis",
"Add Memory": "Cuir Cuimhne",
"Add Model": "Cuir múnla leis",
"Add Tag": "Cuir Clib leis",
"Add Tags": "Cuir Clibeanna leis",
"Add text content": "Cuir ábhar téacs leis",
"Add User": "Cuir Úsáideoir leis",
"Add User Group": "",
"Add User Group": "Cuir Grúpa Úsáideoirí leis",
"Adjusting these settings will apply changes universally to all users.": "Cuirfear na socruithe seo ag coigeartú athruithe go huilíoch ar gach úsáideoir.",
"admin": "riarachán",
"Admin": "Riarachán",
@@ -48,17 +48,18 @@
"Advanced Params": "Paraiméid Casta",
"All chats": "Gach comhrá",
"All Documents": "Gach Doiciméad",
"All models deleted successfully": "",
"Allow Chat Delete": "",
"All models deleted successfully": "Scriosadh na samhlacha go léir go rathúil",
"Allow Chat Delete": "Ceadaigh Comhrá a Scriosadh",
"Allow Chat Deletion": "Cead Scriosadh Comhrá",
"Allow Chat Edit": "",
"Allow File Upload": "",
"Allow Chat Edit": "Ceadaigh Eagarthóireacht Comhrá",
"Allow File Upload": "Ceadaigh Uaslódáil Comhad",
"Allow non-local voices": "Lig guthanna neamh-áitiúla",
"Allow Temporary Chat": "Cead Comhrá Sealadach",
"Allow User Location": "Ceadaigh Suíomh Úsáideora",
"Allow Voice Interruption in Call": "Ceadaigh Briseadh Guth i nGlao",
"Already have an account?": "Tá cuntas agat cheana féin?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "Rogha eile seachas an top_p, agus tá sé mar aidhm aige cothromaíocht cáilíochta agus éagsúlachta a chinntiú. Léiríonn an paraiméadar p an dóchúlacht íosta go mbreithneofar comhartha, i gcoibhneas le dóchúlacht an chomhartha is dóichí. Mar shampla, le p=0.05 agus dóchúlacht 0.9 ag an comhartha is dóichí, déantar logits le luach níos lú ná 0.045 a scagadh amach. (Réamhshocrú: 0.0)",
"Amazing": "Iontach",
"an assistant": "cúntóir",
"and": "agus",
"and {{COUNT}} more": "agus {{COUNT}} eile",
@@ -67,15 +68,15 @@
"API Key": "Eochair API",
"API Key created.": "Cruthaíodh Eochair API.",
"API keys": "Eochracha API",
"Application DN": "",
"Application DN Password": "",
"applies to all users with the \"user\" role": "",
"Application DN": "Feidhmchlár DN",
"Application DN Password": "Feidhmchlár DN Pasfhocal",
"applies to all users with the \"user\" role": "baineann sé le gach úsáideoir a bhfuil an ról \"úsáideoir\" aige",
"April": "Aibreán",
"Archive": "Cartlann",
"Archive All Chats": "Cartlann Gach Comhrá",
"Archived Chats": "Comhráite Cartlann",
"archived-chat-export": "",
"Are you sure you want to unarchive all archived chats?": "",
"archived-chat-export": "gcartlann-comhrá-onnmhairiú",
"Are you sure you want to unarchive all archived chats?": "An bhfuil tú cinnte gur mhaith leat gach comhrá cartlainne a dhíchartlannú?",
"Are you sure?": "An bhfuil tú cinnte?",
"Arena Models": "Múnlaí Airéine",
"Artifacts": "Déantáin",
@@ -83,10 +84,10 @@
"Assistant": "Cúntóir",
"Attach file": "Ceangail comhad",
"Attention to detail": "Aird ar mhionsonraí",
"Attribute for Username": "",
"Attribute for Username": "Tréith don Ainm Úsáideora",
"Audio": "Fuaim",
"August": "Lúnasa",
"Authenticate": "",
"Authenticate": "Fíordheimhnigh",
"Auto-Copy Response to Clipboard": "Freagra AutoCopy go Gearrthaisce",
"Auto-playback response": "Freagra uathsheinm",
"Automatic1111": "Uathoibríoch1111",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "Tá URL bonn UATHOMATIC1111 ag teastáil.",
"Available list": "Liosta atá ar fáil",
"available!": "ar fáil!",
"Awful": "Uafásach",
"Azure AI Speech": "Óráid Azure AI",
"Azure Region": "Réigiún Azure",
"Back": "Ar ais",
@@ -104,27 +106,27 @@
"Batch Size (num_batch)": "Méid Baisc (num_batch)",
"before": "roimh",
"Being lazy": "A bheith leisciúil",
"Bing Search V7 Endpoint": "",
"Bing Search V7 Subscription Key": "",
"Bing Search V7 Endpoint": "Cuardach Bing V7 Críochphointe",
"Bing Search V7 Subscription Key": "Eochair Síntiúis Bing Cuardach V7",
"Brave Search API Key": "Eochair API Cuardaigh Brave",
"By {{name}}": "",
"By {{name}}": "Le {{name}}",
"Bypass SSL verification for Websites": "Seachbhachtar fíorú SSL do Láithreáin",
"Call": "Glaoigh",
"Call feature is not supported when using Web STT engine": "Ní thacaítear le gné glaonna agus inneall Web STT á úsáid",
"Camera": "Ceamara",
"Cancel": "Cealaigh",
"Capabilities": "Cumais",
"Certificate Path": "",
"Certificate Path": "Cosán Teastais",
"Change Password": "Athraigh Pasfhocal",
"Character": "Carachtar",
"Chart new frontiers": "",
"Chart new frontiers": "Cairt teorainneacha nua",
"Chat": "Comhrá",
"Chat Background Image": "Íomhá Cúlra Comhrá",
"Chat Bubble UI": "Comhrá Bubble UI",
"Chat Controls": "Rialuithe Comhrá",
"Chat direction": "Treo comhrá",
"Chat Overview": "Forbhreathnú ar an",
"Chat Permissions": "",
"Chat Permissions": "Ceadanna Comhrá",
"Chat Tags Auto-Generation": "Clibeanna Comhrá Auto-Giniúint",
"Chats": "Comhráite",
"Check Again": "Seiceáil Arís",
@@ -134,11 +136,11 @@
"Chunk Overlap": "Forluí smután",
"Chunk Params": "Chunk Params",
"Chunk Size": "Méid an Píosa",
"Ciphers": "",
"Ciphers": "Cipéirí",
"Citation": "Lua",
"Clear memory": "Cuimhne ghlan",
"click here": "",
"Click here for filter guides.": "",
"click here": "cliceáil anseo",
"Click here for filter guides.": "Cliceáil anseo le haghaidh treoracha scagaire.",
"Click here for help.": "Cliceáil anseo le haghaidh cabhair.",
"Click here to": "Cliceáil anseo chun",
"Click here to download user import template file.": "Cliceáil anseo chun an comhad iompórtála úsáideora a íoslódáil.",
@@ -155,7 +157,7 @@
"Code execution": "Cód a fhorghníomhú",
"Code formatted successfully": "Cód formáidithe go rathúil",
"Collection": "Bailiúchán",
"Color": "",
"Color": "Dath",
"ComfyUI": "ComfyUI",
"ComfyUI Base URL": "URL Bonn ComfyUI",
"ComfyUI Base URL is required.": "Teastaíonn URL ComfyUI Base.",
@@ -164,7 +166,7 @@
"Command": "Ordú",
"Completions": "Críochnaithe",
"Concurrent Requests": "Iarrataí Comhthéime",
"Configure": "",
"Configure": "Cumraigh",
"Confirm": "Deimhnigh",
"Confirm Password": "Deimhnigh Pasfhocal",
"Confirm your action": "Deimhnigh do ghníomh",
@@ -175,11 +177,11 @@
"Context Length": "Fad Comhthéacs",
"Continue Response": "Leanúint ar aghaidh",
"Continue with {{provider}}": "Lean ar aghaidh le {{provider}}",
"Continue with Email": "",
"Continue with LDAP": "",
"Continue with Email": "Lean ar aghaidh le Ríomhphost",
"Continue with LDAP": "Lean ar aghaidh le LDAP",
"Control how message text is split for TTS requests. 'Punctuation' splits into sentences, 'paragraphs' splits into paragraphs, and 'none' keeps the message as a single string.": "Rialú conas a roinntear téacs teachtaireachta d'iarratais TTS. Roinneann 'poncaíocht' ina abairtí, scoilteann 'míreanna' i míreanna, agus coinníonn 'aon' an teachtaireacht mar shreang amháin.",
"Controls": "Rialuithe",
"Controls the balance between coherence and diversity of the output. A lower value will result in more focused and coherent text. (Default: 5.0)": "",
"Controls the balance between coherence and diversity of the output. A lower value will result in more focused and coherent text. (Default: 5.0)": "Rialaíonn sé an chothromaíocht idir comhleanúnachas agus éagsúlacht an aschuir. Beidh téacs níos dírithe agus níos soiléire mar thoradh ar luach níos ísle. (Réamhshocrú: 5.0)",
"Copied": "Cóipeáladh",
"Copied shared chat URL to clipboard!": "Cóipeáladh URL an chomhrá roinnte chuig an ngearrthaisce!",
"Copied to clipboard": "Cóipeáilte go gear",
@@ -189,12 +191,12 @@
"Copy Link": "Cóipeáil Nasc",
"Copy to clipboard": "Cóipeáil chuig an ngearrthaisce",
"Copying to clipboard was successful!": "D'éirigh le cóipeáil chuig an ngearrthaisce!",
"Create": "",
"Create a knowledge base": "",
"Create": "Cruthaigh",
"Create a knowledge base": "Cruthaigh bonn eolais",
"Create a model": "Cruthaigh samhail",
"Create Account": "Cruthaigh Cuntas",
"Create Admin Account": "",
"Create Group": "",
"Create Admin Account": "Cruthaigh Cuntas Riaracháin",
"Create Group": "Cruthaigh Grúpa",
"Create Knowledge": "Cruthaigh Eolais",
"Create new key": "Cruthaigh eochair nua",
"Create new secret key": "Cruthaigh eochair rúnda nua",
@@ -213,16 +215,16 @@
"Default (SentenceTransformers)": "Réamhshocraithe (SentenceTransFormers)",
"Default Model": "Samhail Réamhshocraithe",
"Default model updated": "An tsamhail réamhshocraithe",
"Default permissions": "",
"Default permissions updated successfully": "",
"Default permissions": "Ceadanna réamhshocraithe",
"Default permissions updated successfully": "D'éirigh le ceadanna réamhshocraithe a nuashonrú",
"Default Prompt Suggestions": "Moltaí Pras Réamhshocraithe",
"Default to 389 or 636 if TLS is enabled": "",
"Default to ALL": "",
"Default to 389 or 636 if TLS is enabled": "Réamhshocrú go 389 nó 636 má tá TLS cumasaithe",
"Default to ALL": "Réamhshocrú do GACH",
"Default User Role": "Ról Úsáideora Réamhshoc",
"Delete": "Scrios",
"Delete a model": "Scrios samhail",
"Delete All Chats": "Scrios Gach Comhrá",
"Delete All Models": "",
"Delete All Models": "Scrios Gach Múnla",
"Delete chat": "Scrios comhrá",
"Delete Chat": "Scrios Comhrá",
"Delete chat?": "Scrios comhrá?",
@@ -234,7 +236,8 @@
"Delete User": "Scrios Úsáideoir",
"Deleted {{deleteModelTag}}": "Scriosta {{deleteModelTag}}",
"Deleted {{name}}": "Scriosta {{name}}",
"Describe your knowledge base and objectives": "",
"Deleted User": "Úsáideoir Scriosta",
"Describe your knowledge base and objectives": "Déan cur síos ar do bhunachar eolais agus do chuspóirí",
"Description": "Cur síos",
"Didn't fully follow instructions": "Níor lean sé treoracha go hiomlán",
"Disabled": "Díchumasaithe",
@@ -242,17 +245,17 @@
"Discover a model": "Faigh amach samhail",
"Discover a prompt": "Faigh amach pras",
"Discover a tool": "Faigh amach uirlis",
"Discover wonders": "",
"Discover wonders": "Faigh amach iontais",
"Discover, download, and explore custom functions": "Faigh amach, íoslódáil agus iniúchadh feidhmeanna saincheaptha",
"Discover, download, and explore custom prompts": "Leideanna saincheaptha a fháil amach, a íoslódáil agus a iniúchadh",
"Discover, download, and explore custom tools": "Uirlisí saincheaptha a fháil amach, íoslódáil agus iniúchadh",
"Discover, download, and explore model presets": "Réamhshocruithe samhail a fháil amach, a íoslódáil agus a iniúchadh",
"Dismissible": "Dífhostaithe",
"Display": "",
"Display": "Taispeáin",
"Display Emoji in Call": "Taispeáin Emoji i nGlao",
"Display the username instead of You in the Chat": "Taispeáin an t-ainm úsáideora in ionad Tú sa Comhrá",
"Displays citations in the response": "",
"Dive into knowledge": "",
"Displays citations in the response": "Taispeánann sé luanna sa fhreagra",
"Dive into knowledge": "Léim isteach eolas",
"Do not install functions from sources you do not fully trust.": "Ná suiteáil feidhmeanna ó fhoinsí nach bhfuil muinín iomlán agat.",
"Do not install tools from sources you do not fully trust.": "Ná suiteáil uirlisí ó fhoinsí nach bhfuil muinín iomlán agat.",
"Document": "Doiciméad",
@@ -267,39 +270,39 @@
"Download": "Íoslódáil",
"Download canceled": "Íoslódáil cealaithe",
"Download Database": "Íoslódáil Bunachair",
"Drag and drop a file to upload or select a file to view": "",
"Drag and drop a file to upload or select a file to view": "Tarraing agus scaoil comhad le huaslódáil nó roghnaigh comhad le féachaint air",
"Draw": "Tarraing",
"Drop any files here to add to the conversation": "Scaoil aon chomhaid anseo le cur leis an gcomhrá",
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "m.sh. '30s', '10m'. Is iad aonaid ama bailí ná 's', 'm', 'h'.",
"e.g. A filter to remove profanity from text": "",
"e.g. My Filter": "",
"e.g. My Tools": "",
"e.g. my_filter": "",
"e.g. my_tools": "",
"e.g. Tools for performing various operations": "",
"e.g. A filter to remove profanity from text": "m.h. Scagaire chun profanity a bhaint as téacs",
"e.g. My Filter": "m.sh. Mo Scagaire",
"e.g. My Tools": "e.g. Mo Uirlisí",
"e.g. my_filter": "m.sh. mo_scagaire",
"e.g. my_tools": "m.sh. mo_uirlisí",
"e.g. Tools for performing various operations": "m.sh. Uirlisí chun oibríochtaí éagsúla a dhéanamh",
"Edit": "Cuir in eagar",
"Edit Arena Model": "Cuir Samhail Airéine in Eagar",
"Edit Connection": "",
"Edit Default Permissions": "",
"Edit Connection": "Cuir Ceangal in Eagar",
"Edit Default Permissions": "Cuir Ceadanna Réamhshocraithe in Eagar",
"Edit Memory": "Cuir Cuimhne in eagar",
"Edit User": "Cuir Úsáideoir in eagar",
"Edit User Group": "",
"Edit User Group": "Cuir Grúpa Úsáideoirí in Eagar",
"ElevenLabs": "Eleven Labs",
"Email": "Ríomhphost",
"Embark on adventures": "",
"Embark on adventures": "Dul ar eachtraí",
"Embedding Batch Size": "Méid Baisc a ionchorprú",
"Embedding Model": "Múnla Leabháilte",
"Embedding Model Engine": "Inneall Múnla Ionchorprú",
"Embedding model set to \"{{embedding_model}}\"": "Samhail leabaithe atá socraithe go \"{{embedding_model}}\"",
"Enable API Key Auth": "",
"Enable API Key Auth": "Cumasaigh Fíordheimhniú Eochracha API",
"Enable Community Sharing": "Cumasaigh Comhroinnt Pobail",
"Enable Memory Locking (mlock) to prevent model data from being swapped out of RAM. This option locks the model's working set of pages into RAM, ensuring that they will not be swapped out to disk. This can help maintain performance by avoiding page faults and ensuring fast data access.": "",
"Enable Memory Mapping (mmap) to load model data. This option allows the system to use disk storage as an extension of RAM by treating disk files as if they were in RAM. This can improve model performance by allowing for faster data access. However, it may not work correctly with all systems and can consume a significant amount of disk space.": "",
"Enable Memory Locking (mlock) to prevent model data from being swapped out of RAM. This option locks the model's working set of pages into RAM, ensuring that they will not be swapped out to disk. This can help maintain performance by avoiding page faults and ensuring fast data access.": "Cumasaigh Glasáil Cuimhne (mlock) chun sonraí samhaltaithe a chosc ó RAM. Glasálann an rogha seo sraith oibre leathanaigh an mhúnla isteach i RAM, ag cinntiú nach ndéanfar iad a mhalartú go diosca. Is féidir leis seo cabhrú le feidhmíocht a choinneáil trí lochtanna leathanaigh a sheachaint agus rochtain tapa ar shonraí a chinntiú.",
"Enable Memory Mapping (mmap) to load model data. This option allows the system to use disk storage as an extension of RAM by treating disk files as if they were in RAM. This can improve model performance by allowing for faster data access. However, it may not work correctly with all systems and can consume a significant amount of disk space.": "Cumasaigh Mapáil Cuimhne (mmap) chun sonraí samhla a lódáil. Ligeann an rogha seo don chóras stóráil diosca a úsáid mar leathnú ar RAM trí chomhaid diosca a chóireáil amhail is dá mba i RAM iad. Is féidir leis seo feidhmíocht na samhla a fheabhsú trí rochtain níos tapúla ar shonraí a cheadú. Mar sin féin, d'fhéadfadh sé nach n-oibreoidh sé i gceart le gach córas agus féadfaidh sé méid suntasach spáis diosca a ithe.",
"Enable Message Rating": "Cumasaigh Rátáil Teachtai",
"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "",
"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "Cumasaigh sampláil Mirostat chun seachrán a rialú. (Réamhshocrú: 0, 0 = Díchumasaithe, 1 = Mirostat, 2 = Mirostat 2.0)",
"Enable New Sign Ups": "Cumasaigh Clárúcháin Nua",
"Enable Retrieval Query Generation": "",
"Enable Tags Generation": "",
"Enable Retrieval Query Generation": "Cumasaigh Giniúint Iarratas Aisghabhála",
"Enable Tags Generation": "Cumasaigh Giniúint Clibeanna",
"Enable Web Search": "Cumasaigh Cuardach Gréasáin",
"Enable Web Search Query Generation": "Cumasaigh Giniúint Ceist Cuardaigh Gréasáin",
"Enabled": "Cumasaithe",
@@ -308,12 +311,12 @@
"Enter {{role}} message here": "Cuir isteach teachtaireacht {{role}} anseo",
"Enter a detail about yourself for your LLMs to recall": "Cuir isteach mionsonraí fút féin chun do LLManna a mheabhrú",
"Enter api auth string (e.g. username:password)": "Cuir isteach sreang auth api (m.sh. ainm úsáideora: pasfhocal)",
"Enter Application DN": "",
"Enter Application DN Password": "",
"Enter Bing Search V7 Endpoint": "",
"Enter Bing Search V7 Subscription Key": "",
"Enter Brave Search API Key": "Cuir isteach Eochair API Brave Search",
"Enter certificate path": "",
"Enter Application DN": "Cuir isteach Feidhmchlár DN",
"Enter Application DN Password": "Iontráil Feidhmchlár DN Pasfhocal",
"Enter Bing Search V7 Endpoint": "Cuir isteach Cuardach Bing V7 Críochphointe",
"Enter Bing Search V7 Subscription Key": "Cuir isteach Eochair Síntiúis Bing Cuardach V7",
"Enter Brave Search API Key": "Cuir isteach Eochair API Brave Cuardach",
"Enter certificate path": "Cuir isteach cosán an teastais",
"Enter CFG Scale (e.g. 7.0)": "Cuir isteach Scála CFG (m.sh. 7.0)",
"Enter Chunk Overlap": "Cuir isteach Chunk Forluí",
"Enter Chunk Size": "Cuir isteach Méid an Chunc",
@@ -322,10 +325,11 @@
"Enter Google PSE API Key": "Cuir isteach Eochair API Google PSE",
"Enter Google PSE Engine Id": "Cuir isteach ID Inneall Google PSE",
"Enter Image Size (e.g. 512x512)": "Iontráil Méid Íomhá (m.sh. 512x512)",
"Enter Jina API Key": "",
"Enter Jina API Key": "Cuir isteach Eochair API Jina",
"Enter language codes": "Cuir isteach cóid teanga",
"Enter Model ID": "Iontráil ID Mhúnla",
"Enter model tag (e.g. {{modelTag}})": "Cuir isteach chlib samhail (m.sh. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Iontráil Líon na gCéimeanna (m.sh. 50)",
"Enter Sampler (e.g. Euler a)": "Cuir isteach Sampler (m.sh. Euler a)",
"Enter Scheduler (e.g. Karras)": "Cuir isteach Sceidealóir (m.sh. Karras)",
@@ -333,13 +337,13 @@
"Enter SearchApi API Key": "Cuir isteach Eochair API SearchAPI",
"Enter SearchApi Engine": "Cuir isteach Inneall SearchAPI",
"Enter Searxng Query URL": "Cuir isteach URL Ceist Searxng",
"Enter Seed": "",
"Enter Seed": "Cuir isteach Síl",
"Enter Serper API Key": "Cuir isteach Eochair API Serper",
"Enter Serply API Key": "Cuir isteach Eochair API Serply",
"Enter Serpstack API Key": "Cuir isteach Eochair API Serpstack",
"Enter server host": "",
"Enter server label": "",
"Enter server port": "",
"Enter server host": "Cuir isteach óstach freastalaí",
"Enter server label": "Cuir isteach lipéad freastalaí",
"Enter server port": "Cuir isteach port freastalaí",
"Enter stop sequence": "Cuir isteach seicheamh stad",
"Enter system prompt": "Cuir isteach an chóras pras",
"Enter Tavily API Key": "Cuir isteach eochair API Tavily",
@@ -352,28 +356,28 @@
"Enter your message": "Cuir isteach do theachtaireacht",
"Enter Your Password": "Cuir isteach do phasfhocal",
"Enter Your Role": "Cuir isteach do Ról",
"Enter Your Username": "",
"Enter Your Username": "Cuir isteach D'Ainm Úsáideora",
"Error": "Earráid",
"ERROR": "EARRÁID",
"Evaluations": "Meastóireachtaí",
"Example: (&(objectClass=inetOrgPerson)(uid=%s))": "",
"Example: ALL": "",
"Example: ou=users,dc=foo,dc=example": "",
"Example: sAMAccountName or uid or userPrincipalName": "",
"Example: (&(objectClass=inetOrgPerson)(uid=%s))": "Sampla: (&(objectClass=inetOrgPerson)(uid=%s))",
"Example: ALL": "Sampla: GACH",
"Example: ou=users,dc=foo,dc=example": "Sampla: ou=úsáideoirí,dc=foo,dc=sampla",
"Example: sAMAccountName or uid or userPrincipalName": "Sampla: sAMAaccountName nó uid nó userPrincipalName",
"Exclude": "Eisigh",
"Experimental": "Turgnamhach",
"Explore the cosmos": "",
"Explore the cosmos": "Déan iniúchadh ar an cosmos",
"Export": "Easpórtáil",
"Export All Archived Chats": "",
"Export All Archived Chats": "Easpórtáil Gach Comhrá Cartlainne",
"Export All Chats (All Users)": "Easpórtáil gach comhrá (Gach Úsáideoir)",
"Export chat (.json)": "Easpórtáil comhrá (.json)",
"Export Chats": "Comhráite Easpórtá",
"Export Config to JSON File": "Easpórtáil Cumraíocht chuig Comhad JSON",
"Export Functions": "Feidhmeanna Easp",
"Export Models": "Múnlaí a Easpórtáil",
"Export Presets": "",
"Export Presets": "Easpórtáil Gach Comhrá Cartlainne",
"Export Prompts": "Leideanna Easpórtála",
"Export to CSV": "",
"Export to CSV": "Easpórtáil go CSV",
"Export Tools": "Uirlisí Easpór",
"External Models": "Múnlaí Seachtracha",
"Failed to add file.": "Theip ar an gcomhad a chur leis.",
@@ -383,7 +387,7 @@
"Failed to upload file.": "Theip ar uaslódáil an chomhaid.",
"February": "Feabhra",
"Feedback History": "Stair Aiseolais",
"Feedbacks": "",
"Feedbacks": "Aiseolas",
"Feel free to add specific details": "Ná bíodh leisce ort sonraí ar leith a chur leis",
"File": "Comhad",
"File added successfully.": "D'éirigh leis an gcomhad a chur leis.",
@@ -404,18 +408,18 @@
"Folder name cannot be empty.": "Ní féidir ainm fillteáin a bheith folamh.",
"Folder name updated successfully": "D'éirigh le hainm an fhillteáin a nuashonrú",
"Followed instructions perfectly": "Lean treoracha go foirfe",
"Forge new paths": "",
"Forge new paths": "Déan cosáin nua a chruthú",
"Form": "Foirm",
"Format your variables using brackets like this:": "Formáidigh na hathróga ag baint úsáide as lúibíní mar seo:",
"Frequency Penalty": "Pionós Minicíochta",
"Function": "Feidhm",
"Function created successfully": "Cruthaíodh feidhm go rathúil",
"Function deleted successfully": "Feidhm scriosta go rathúil",
"Function Description": "",
"Function ID": "",
"Function Description": "Cur síos ar Fheidhm",
"Function ID": "ID Feidhme",
"Function is now globally disabled": "Tá an fheidhm faoi mhíchumas go domhanda",
"Function is now globally enabled": "Tá feidhm cumasaithe go domhanda anois",
"Function Name": "",
"Function Name": "Ainm Feidhme",
"Function updated successfully": "Feidhm nuashonraithe",
"Functions": "Feidhmeanna",
"Functions allow arbitrary code execution": "Ligeann feidhmeanna forghníomhú cód",
@@ -426,33 +430,34 @@
"Generate Image": "Ginigh Íomhá",
"Generating search query": "Giniúint ceist cuardaigh",
"Generation Info": "Eolas Giniúin",
"Get started": "",
"Get started with {{WEBUI_NAME}}": "",
"Get started": "Cuir tús leis",
"Get started with {{WEBUI_NAME}}": "Cuir tús le {{WEBUI_NAME}}",
"Global": "Domhanda",
"Good Response": "Freagra Mhaith",
"Google PSE API Key": "Eochair API Google PSE",
"Google PSE Engine Id": "ID Inneall Google PSE",
"Group created successfully": "",
"Group deleted successfully": "",
"Group Description": "",
"Group Name": "",
"Group updated successfully": "",
"Groups": "",
"Group created successfully": "Grúpa cruthaithe go rathúil",
"Group deleted successfully": "D'éirigh le scriosadh an ghrúpa",
"Group Description": "Cur síos ar an nGrúpa",
"Group Name": "Ainm an Ghrúpa",
"Group updated successfully": "D'éirigh le nuashonrú an ghrúpa",
"Groups": "Grúpaí",
"h:mm a": "h: mm a",
"Haptic Feedback": "Aiseolas Haptic",
"has no conversations.": "níl aon chomhráite aige.",
"Hello, {{name}}": "Dia duit, {{name}}",
"Help": "Cabhair",
"Help us create the best community leaderboard by sharing your feedback history!": "Cabhraigh linn an clár ceannairí pobail is fearr a chruthú trí do stair aiseolais a roinnt!",
"Hex Color": "",
"Hex Color - Leave empty for default color": "",
"Hex Color": "Dath Heics",
"Hex Color - Leave empty for default color": "Dath Heics - Fág folamh don dath réamhshocraithe",
"Hide": "Folaigh",
"Host": "",
"Host": "Óstach",
"How can I help you today?": "Conas is féidir liom cabhrú leat inniu?",
"How would you rate this response?": "Cad é mar a mheasfá an freagra seo?",
"Hybrid Search": "Cuardach Hibrideach",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Admhaím gur léigh mé agus tuigim impleachtaí mo ghníomhaíochta. Táim ar an eolas faoi na rioscaí a bhaineann le cód treallach a fhorghníomhú agus tá iontaofacht na foinse fíoraithe agam.",
"ID": "ID",
"Ignite curiosity": "",
"Ignite curiosity": "Las fiosracht",
"Image Generation (Experimental)": "Giniúint Íomhá (Turgnaimh)",
"Image Generation Engine": "Inneall Giniúna Íomh",
"Image Settings": "Socruithe Íomhá",
@@ -461,13 +466,13 @@
"Import Config from JSON File": "Cumraíocht Iompórtáil ó Chomhad JSON",
"Import Functions": "Feidhmeanna Iom",
"Import Models": "Múnlaí a Iompórtáil",
"Import Presets": "",
"Import Presets": "Réamhshocruithe Iompórtáil",
"Import Prompts": "Leideanna Iompórtála",
"Import Tools": "Uirlisí Iomp",
"Include": "Cuir san áireamh",
"Include `--api-auth` flag when running stable-diffusion-webui": "Cuir bratach `--api-auth` san áireamh agus webui stable-diffusion-reatha á rith",
"Include `--api` flag when running stable-diffusion-webui": "Cuir bratach `--api` san áireamh agus webui cobhsaí-scaipthe á rith",
"Influences how quickly the algorithm responds to feedback from the generated text. A lower learning rate will result in slower adjustments, while a higher learning rate will make the algorithm more responsive. (Default: 0.1)": "",
"Influences how quickly the algorithm responds to feedback from the generated text. A lower learning rate will result in slower adjustments, while a higher learning rate will make the algorithm more responsive. (Default: 0.1)": "Bíonn tionchar aige ar chomh tapa agus a fhreagraíonn an t-algartam daiseolas ón téacs ginte. Beidh coigeartuithe níos moille mar thoradh ar ráta foghlama níos ísle, agus déanfaidh ráta foghlama níos airde an t-algartam níos freagraí. (Réamhshocrú: 0.1)",
"Info": "Eolas",
"Input commands": "Orduithe ionchuir",
"Install from Github URL": "Suiteáil ó Github URL",
@@ -476,7 +481,7 @@
"Invalid file format.": "Formáid comhaid neamhbhailí.",
"Invalid Tag": "Clib neamhbhailí",
"January": "Eanáir",
"Jina API Key": "",
"Jina API Key": "Jina API Eochair",
"join our Discord for help.": "bí inár Discord chun cabhair a fháil.",
"JSON": "JSON",
"JSON Preview": "Réamhamharc JSON",
@@ -485,31 +490,31 @@
"JWT Expiration": "Éag JWT",
"JWT Token": "Comhartha JWT",
"Keep Alive": "Coinnigh Beo",
"Key": "",
"Key": "Eochair",
"Keyboard shortcuts": "Aicearraí méarchlár",
"Knowledge": "Eolas",
"Knowledge Access": "",
"Knowledge Access": "Rochtain Eolais",
"Knowledge created successfully.": "Eolas cruthaithe go rathúil.",
"Knowledge deleted successfully.": "D'éirigh leis an eolas a scriosadh.",
"Knowledge reset successfully.": "D'éirigh le hathshocrú eolais.",
"Knowledge updated successfully": "D'éirigh leis an eolas a nuashonrú",
"Label": "",
"Label": "Lipéad",
"Landing Page Mode": "Mód Leathanach Tuirlingthe",
"Language": "Teanga",
"Last Active": "Gníomhach Deiridh",
"Last Modified": "Athraithe Deiridh",
"LDAP": "",
"LDAP server updated": "",
"LDAP": "LDAP",
"LDAP server updated": "Nuashonraíodh freastalaí LDAP",
"Leaderboard": "An Clár Ceannairí",
"Leave empty for unlimited": "Fág folamh le haghaidh neamhtheoranta",
"Leave empty to include all models from \"{{URL}}/api/tags\" endpoint": "",
"Leave empty to include all models from \"{{URL}}/models\" endpoint": "",
"Leave empty to include all models from \"{{URL}}/api/tags\" endpoint": "Fág folamh chun gach múnla ó chríochphointe \"{{URL}}/api/tags\" a chur san áireamh",
"Leave empty to include all models from \"{{URL}}/models\" endpoint": "Fág folamh chun gach múnla ón gcríochphointe \"{{URL}}/models\" a chur san áireamh",
"Leave empty to include all models or select specific models": "Fág folamh chun gach múnla a chur san áireamh nó roghnaigh múnlaí sonracha",
"Leave empty to use the default prompt, or enter a custom prompt": "Fág folamh chun an pras réamhshocraithe a úsáid, nó cuir isteach pras saincheaptha",
"Light": "Solas",
"Listening...": "Éisteacht...",
"LLMs can make mistakes. Verify important information.": "Is féidir le LLManna botúin a dhéanamh. Fíoraigh faisnéis thábhachtach.",
"Local": "",
"Local": "Áitiúil",
"Local Models": "Múnlaí Áitiúla",
"Lost": "Cailleadh",
"LTR": "LTR",
@@ -518,9 +523,9 @@
"Make sure to export a workflow.json file as API format from ComfyUI.": "Déan cinnte comhad workflow.json a onnmhairiú mar fhormáid API ó ComfyUI.",
"Manage": "Bainistiú",
"Manage Arena Models": "Bainistigh Múnlaí Airéine",
"Manage Ollama": "",
"Manage Ollama API Connections": "",
"Manage OpenAI API Connections": "",
"Manage Ollama": "Bainistigh Ollama",
"Manage Ollama API Connections": "Bainistigh Naisc API Ollama",
"Manage OpenAI API Connections": "Bainistigh Naisc API OpenAI",
"Manage Pipelines": "Bainistigh píblín",
"March": "Márta",
"Max Tokens (num_predict)": "Comharthaí Uasta (num_predicate)",
@@ -543,8 +548,8 @@
"Mirostat Eta": "Mirostat Eta",
"Mirostat Tau": "Mirostat Tau",
"MMMM DD, YYYY": "MMMM LL, BBBB",
"MMMM DD, YYYY HH:mm": "MMMM LL, BBBB HH:mm",
"MMMM DD, YYYY hh:mm:ss A": "MMMM LL, BBBB hh:mm:ss A",
"MMMM DD, YYYY HH:mm": "MMMM LL, BBBB UU:nn",
"MMMM DD, YYYY hh:mm:ss A": "MMMM LL, BBBB uu:nn:ss A",
"Model": "Múnla",
"Model '{{modelName}}' has been successfully downloaded.": "Rinneadh an tsamhail '{{modelName}}' a íoslódáil go rathúil.",
"Model '{{modelTag}}' is already in queue for downloading.": "Tá múnla {{modelTag}} sa scuaine cheana féin le híoslódáil.",
@@ -554,21 +559,22 @@
"Model accepts image inputs": "Glacann múnla le hionchuir",
"Model created successfully!": "Cruthaíodh múnla go rathúil!",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Braitheadh \u200b\u200bconair chóras comhad samhail. Teastaíonn mionainm múnla le haghaidh nuashonraithe, ní féidir leanúint ar aghaidh.",
"Model Filtering": "",
"Model ID": "ID Mhúnla",
"Model IDs": "",
"Model Filtering": "Scagadh Múnla",
"Model ID": "ID Múnla",
"Model IDs": "IDanna Múnla",
"Model Name": "Ainm Múnla",
"Model not selected": "Múnla nach roghnaíodh",
"Model Params": "Múnla Params",
"Model Permissions": "",
"Model Permissions": "Ceadanna Múnla",
"Model updated successfully": "An tsamhail nuashonraithe",
"Modelfile Content": "Ábhar Modelfile",
"Models": "Múnlaí",
"Models Access": "",
"Models Access": "Rochtain Múnlaí",
"Mojeek Search API Key": "",
"more": "níos mó",
"More": "Tuilleadh",
"Name": "Ainm",
"Name your knowledge base": "",
"Name your knowledge base": "Cuir ainm ar do bhunachar eolais",
"New Chat": "Comhrá Nua",
"New folder": "Fillteán nua",
"New Password": "Pasfhocal Nua",
@@ -578,15 +584,15 @@
"No feedbacks found": "Níor aimsíodh aon aiseolas",
"No file selected": "Níl aon chomhad roghnaithe",
"No files found.": "Níor aimsíodh aon chomhaid.",
"No groups with access, add a group to grant access": "",
"No groups with access, add a group to grant access": "Gan aon ghrúpa a bhfuil rochtain acu, cuir grúpa leis chun rochtain a dheonú",
"No HTML, CSS, or JavaScript content found.": "Níor aimsíodh aon ábhar HTML, CSS nó JavaScript.",
"No knowledge found": "Níor aimsíodh aon eolas",
"No model IDs": "",
"No model IDs": "Gan IDanna múnla",
"No models found": "Níor aimsíodh aon mhúnlaí",
"No results found": "Níl aon torthaí le fáil",
"No search query generated": "Ní ghintear aon cheist cuardaigh",
"No source available": "Níl aon fhoinse ar fáil",
"No users were found.": "",
"No users were found.": "Níor aimsíodh aon úsáideoirí.",
"No valves to update": "Gan comhlaí le nuashonrú",
"None": "Dada",
"Not factually correct": "Níl sé ceart go fírineach",
@@ -605,13 +611,13 @@
"Ollama": "Ollama",
"Ollama API": "Ollama API",
"Ollama API disabled": "Ollama API faoi mhíchumas",
"Ollama API settings updated": "",
"Ollama API settings updated": "Nuashonraíodh socruithe Olama API",
"Ollama Version": "Leagan Ollama",
"On": "Ar",
"Only alphanumeric characters and hyphens are allowed": "",
"Only alphanumeric characters and hyphens are allowed": "Ní cheadaítear ach carachtair alfa-uimhriúla agus fleiscíní",
"Only alphanumeric characters and hyphens are allowed in the command string.": "Ní cheadaítear ach carachtair alfauméireacha agus braithíní sa sreangán ordaithe.",
"Only collections can be edited, create a new knowledge base to edit/add documents.": "Ní féidir ach bailiúcháin a chur in eagar, bonn eolais nua a chruthú chun doiciméid a chur in eagar/a chur leis.",
"Only select users and groups with permission can access": "",
"Only select users and groups with permission can access": "Ní féidir ach le húsáideoirí roghnaithe agus le grúpaí a bhfuil cead acu rochtain a fháil",
"Oops! Looks like the URL is invalid. Please double-check and try again.": "Ups! Is cosúil go bhfuil an URL neamhbhailí. Seiceáil faoi dhó le do thoil agus iarracht arís.",
"Oops! There are files still uploading. Please wait for the upload to complete.": "Úps! Tá comhaid fós á n-uaslódáil. Fan go mbeidh an uaslódáil críochnaithe.",
"Oops! There was an error in the previous response.": "Úps! Bhí earráid sa fhreagra roimhe seo.",
@@ -620,34 +626,34 @@
"Open in full screen": "Oscail i scáileán iomlán",
"Open new chat": "Oscail comhrá nua",
"Open WebUI uses faster-whisper internally.": "Úsáideann Open WebUI cogar níos tapúla go hinmheánach.",
"Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "",
"Open WebUI uses SpeechT5 and CMU Arctic speaker embeddings.": "Úsáideann Open WebUI úsáidí SpeechT5 agus CMU leabaithe cainteoir Artach.",
"Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Tá leagan WebUI oscailte (v{{OPEN_WEBUI_VERSION}}) níos ísle ná an leagan riachtanach (v{{REQUIRED_VERSION}})",
"OpenAI": "OpenAI",
"OpenAI API": "API OpenAI",
"OpenAI API Config": "Cumraíocht API OpenAI",
"OpenAI API Key is required.": "Tá Eochair API OpenAI ag teastáil.",
"OpenAI API settings updated": "",
"OpenAI API settings updated": "Nuashonraíodh socruithe OpenAI API",
"OpenAI URL/Key required.": "Teastaíonn URL/eochair OpenAI.",
"or": "nó",
"Organize your users": "",
"Organize your users": "Eagraigh do chuid úsáideoirí",
"Other": "Eile",
"OUTPUT": "ASCHUR",
"Output format": "Formáid aschuir",
"Overview": "Forbhreathnú",
"page": "leathanach",
"Password": "Pasfhocal",
"Paste Large Text as File": "",
"Paste Large Text as File": "Greamaigh Téacs Mór mar Chomhad",
"PDF document (.pdf)": "Doiciméad PDF (.pdf)",
"PDF Extract Images (OCR)": "Íomhánna Sliocht PDF (OCR)",
"pending": "ar feitheamh",
"Permission denied when accessing media devices": "Cead diúltaithe nuair a bhíonn rochtain agat",
"Permission denied when accessing microphone": "Cead diúltaithe agus tú ag rochtain ar",
"Permission denied when accessing microphone: {{error}}": "Cead diúltaithe agus tú ag teacht ar mhicreafón: {{error}}",
"Permissions": "",
"Permissions": "Ceadanna",
"Personalization": "Pearsantú",
"Pin": "Bioráin",
"Pinned": "Pinneáilte",
"Pioneer insights": "",
"Pioneer insights": "Léargais ceannródaí",
"Pipeline deleted successfully": "Scriosta píblíne go rathúil",
"Pipeline downloaded successfully": "Íoslódáilte píblíne",
"Pipelines": "Píblínte",
@@ -659,23 +665,23 @@
"Please enter a prompt": "Cuir isteach leid",
"Please fill in all fields.": "Líon isteach gach réimse le do thoil.",
"Please select a reason": "Roghnaigh cúis le do thoil",
"Port": "",
"Port": "Port",
"Positive attitude": "Dearcadh dearfach",
"Prefix ID": "",
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "",
"Prefix ID": "Aitheantas Réimír",
"Prefix ID is used to avoid conflicts with other connections by adding a prefix to the model IDs - leave empty to disable": "Úsáidtear Aitheantas Réimír chun coinbhleachtaí le naisc eile a sheachaint trí réimír a chur le haitheantas na samhla - fág folamh le díchumasú",
"Previous 30 days": "30 lá roimhe seo",
"Previous 7 days": "7 lá roimhe seo",
"Profile Image": "Íomhá Próifíl",
"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "Pras (m.sh. inis dom fíric spraíúil faoin Impireacht Rómhánach)",
"Prompt Content": "Ábhar Pras",
"Prompt created successfully": "",
"Prompt created successfully": "Leid cruthaithe go rathúil",
"Prompt suggestions": "Moltaí pras",
"Prompt updated successfully": "",
"Prompt updated successfully": "D'éirigh leis an leid a nuashonrú",
"Prompts": "Leabhair",
"Prompts Access": "",
"Prompts Access": "Rochtain ar Chuirí",
"Pull \"{{searchValue}}\" from Ollama.com": "Tarraing \"{{searchValue}}\" ó Ollama.com",
"Pull a model from Ollama.com": "Tarraing múnla ó Ollama.com",
"Query Generation Prompt": "",
"Query Generation Prompt": "Cuirí Ginearáil Ceisteanna",
"Query Params": "Fiosrúcháin Params",
"RAG Template": "Teimpléad RAG",
"Rating": "Rátáil",
@@ -683,7 +689,7 @@
"Read Aloud": "Léigh Ard",
"Record voice": "Taifead guth",
"Redirecting you to OpenWebUI Community": "Tú a atreorú chuig OpenWebUI Community",
"Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative. (Default: 40)": "",
"Reduces the probability of generating nonsense. A higher value (e.g. 100) will give more diverse answers, while a lower value (e.g. 10) will be more conservative. (Default: 40)": "Laghdaíonn sé an dóchúlacht go giniúint nonsense. Tabharfaidh luach níos airde (m.sh. 100) freagraí níos éagsúla, agus beidh luach níos ísle (m.sh. 10) níos coimeádaí. (Réamhshocrú: 40)",
"Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "Tagairt duit féin mar \"Úsáideoir\" (m.sh., \"Tá an úsáideoir ag foghlaim Spáinnis\")",
"References from": "Tagairtí ó",
"Refused when it shouldn't have": "Diúltaíodh nuair nár chóir dó",
@@ -721,19 +727,19 @@
"Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "Ní thacaítear le logaí comhrá a shábháil go díreach chuig stóráil do bhrabhsálaí Tóg nóiméad chun do logaí comhrá a íoslódáil agus a scriosadh trí chliceáil an cnaipe thíos. Ná bíodh imní ort, is féidir leat do logaí comhrá a athiompórtáil go héasca chuig an gcúltaca trí",
"Scroll to bottom when switching between branches": "Scrollaigh go bun agus tú ag athrú idir brainsí",
"Search": "Cuardaigh",
"Search a model": "Cuardaigh samhail",
"Search Base": "",
"Search a model": "Cuardaigh múnla",
"Search Base": "Bonn Cuardaigh",
"Search Chats": "Cuardaigh Comhráite",
"Search Collection": "Bailiúchán Cuardaigh",
"Search Filters": "",
"Search Filters": "Scagairí Cuardaigh",
"search for tags": "cuardach le haghaidh clibeanna",
"Search Functions": "Feidhmeanna Cuardaigh",
"Search Knowledge": "Cuardaigh Eolais",
"Search Models": "Múnlaí Cuardaigh",
"Search options": "",
"Search options": "Roghanna cuardaigh",
"Search Prompts": "Leideanna Cuardaigh",
"Search Result Count": "Líon Torthaí Cuardaigh",
"Search the web": "",
"Search the web": "Cuardaigh an gréasán",
"Search Tools": "Uirlisí Cuardaigh",
"SearchApi API Key": "Eochair API SearchAPI",
"SearchApi Engine": "Inneall SearchAPI",
@@ -748,7 +754,7 @@
"Select a base model": "Roghnaigh bunmhúnla",
"Select a engine": "Roghnaigh inneall",
"Select a function": "Roghnaigh feidhm",
"Select a group": "",
"Select a group": "Roghnaigh grúpa",
"Select a model": "Roghnaigh samhail",
"Select a pipeline": "Roghnaigh píblíne",
"Select a pipeline url": "Roghnaigh url píblíne",
@@ -771,7 +777,7 @@
"Set as default": "Socraigh mar réamhshocraithe",
"Set CFG Scale": "Socraigh Scála CFG",
"Set Default Model": "Socraigh Samhail Réamhshocrú",
"Set embedding model": "",
"Set embedding model": "Socraigh samhail leabaithe",
"Set embedding model (e.g. {{model}})": "Socraigh samhail leabaithe (m.sh. {{model}})",
"Set Image Size": "Socraigh Méid Íomhá",
"Set reranking model (e.g. {{model}})": "Socraigh samhail athrangú (m.sh. {{model}})",
@@ -779,29 +785,29 @@
"Set Scheduler": "Socraigh Sceidealóir",
"Set Steps": "Socraigh Céimeanna",
"Set Task Model": "Socraigh Samhail Tasc",
"Set the number of GPU devices used for computation. This option controls how many GPU devices (if available) are used to process incoming requests. Increasing this value can significantly improve performance for models that are optimized for GPU acceleration but may also consume more power and GPU resources.": "",
"Set the number of worker threads used for computation. This option controls how many threads are used to process incoming requests concurrently. Increasing this value can improve performance under high concurrency workloads but may also consume more CPU resources.": "",
"Set the number of GPU devices used for computation. This option controls how many GPU devices (if available) are used to process incoming requests. Increasing this value can significantly improve performance for models that are optimized for GPU acceleration but may also consume more power and GPU resources.": "Socraigh líon na bhfeistí GPU a úsáidtear le haghaidh ríomh. Rialaíonn an rogha seo cé mhéad gléas GPU (má tá siad ar fáil) a úsáidtear chun iarratais isteach a phróiseáil. Is féidir leis an luach seo a mhéadú feabhas suntasach a chur ar fheidhmíocht do mhúnlaí atá optamaithe le haghaidh luasghéarú GPU ach dfhéadfadh go n-ídíonn siad níos mó cumhachta agus acmhainní GPU freisin.",
"Set the number of worker threads used for computation. This option controls how many threads are used to process incoming requests concurrently. Increasing this value can improve performance under high concurrency workloads but may also consume more CPU resources.": "Socraigh líon na snáitheanna oibrithe a úsáidtear le haghaidh ríomh. Rialaíonn an rogha seo cé mhéad snáithe a úsáidtear chun iarratais a thagann isteach a phróiseáil i gcomhthráth. D'fhéadfadh méadú ar an luach seo feidhmíocht a fheabhsú faoi ualaí oibre comhairgeadra ard ach féadfaidh sé níos mó acmhainní LAP a úsáid freisin.",
"Set Voice": "Socraigh Guth",
"Set whisper model": "Socraigh múnla cogar",
"Sets how far back for the model to look back to prevent repetition. (Default: 64, 0 = disabled, -1 = num_ctx)": "",
"Sets how strongly to penalize repetitions. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. (Default: 1.1)": "",
"Sets the random number seed to use for generation. Setting this to a specific number will make the model generate the same text for the same prompt. (Default: random)": "",
"Sets the size of the context window used to generate the next token. (Default: 2048)": "",
"Sets the stop sequences to use. When this pattern is encountered, the LLM will stop generating text and return. Multiple stop patterns may be set by specifying multiple separate stop parameters in a modelfile.": "",
"Sets how far back for the model to look back to prevent repetition. (Default: 64, 0 = disabled, -1 = num_ctx)": "Socraíonn sé cé chomh fada siar is atá an tsamhail le breathnú siar chun athrá a chosc. (Réamhshocrú: 64, 0 = díchumasaithe, -1 = num_ctx)",
"Sets how strongly to penalize repetitions. A higher value (e.g., 1.5) will penalize repetitions more strongly, while a lower value (e.g., 0.9) will be more lenient. (Default: 1.1)": "Socraíonn sé cé chomh láidir is féidir pionós a ghearradh ar athrá. Cuirfidh luach níos airde (m.sh., 1.5) pionós níos láidre ar athrá, agus beidh luach níos ísle (m.sh., 0.9) níos boige. (Réamhshocrú: 1.1)",
"Sets the random number seed to use for generation. Setting this to a specific number will make the model generate the same text for the same prompt. (Default: random)": "Socraíonn sé an síol uimhir randamach a úsáid le haghaidh giniúna. Má shocraítear é seo ar uimhir shainiúil, ginfidh an tsamhail an téacs céanna don leid céanna. (Réamhshocrú: randamach)",
"Sets the size of the context window used to generate the next token. (Default: 2048)": "Socraíonn sé méid na fuinneoige comhthéacs a úsáidtear chun an chéad chomhartha eile a ghiniúint. (Réamhshocrú: 2048)",
"Sets the stop sequences to use. When this pattern is encountered, the LLM will stop generating text and return. Multiple stop patterns may be set by specifying multiple separate stop parameters in a modelfile.": "Socraíonn sé na stadanna le húsáid. Nuair a thagtar ar an bpatrún seo, stopfaidh an LLM ag giniúint téacs agus ag filleadh. Is féidir patrúin stad iolracha a shocrú trí pharaiméadair stadanna iolracha a shonrú i gcomhad samhail.",
"Settings": "Socruithe",
"Settings saved successfully!": "Socruithe sábhálta go rathúil!",
"Share": "Comhroinn",
"Share Chat": "Comhroinn Comhrá",
"Share to OpenWebUI Community": "Comhroinn le Pobal OpenWebUI",
"Show": "Taispeáin",
"Show \"What's New\" modal on login": "",
"Show \"What's New\" modal on login": "Taispeáin módúil \"Cad atá Nua\" ar logáil isteach",
"Show Admin Details in Account Pending Overlay": "Taispeáin Sonraí Riaracháin sa Chuntas ar Feitheamh Forleagan",
"Show shortcuts": "Taispeáin aicearraí",
"Show your support!": "Taispeáin do thacaíocht!",
"Showcased creativity": "Cruthaitheacht léirithe",
"Sign in": "Sínigh isteach",
"Sign in to {{WEBUI_NAME}}": "Sínigh isteach ar {{WEBUI_NAME}}",
"Sign in to {{WEBUI_NAME}} with LDAP": "",
"Sign in to {{WEBUI_NAME}} with LDAP": "Sínigh isteach ar {{WEBUI_NAME}} le LDAP",
"Sign Out": "Sínigh Amach",
"Sign up": "Cláraigh",
"Sign up to {{WEBUI_NAME}}": "Cláraigh le {{WEBUI_NAME}}",
@@ -826,7 +832,7 @@
"System Instructions": "Treoracha Córas",
"System Prompt": "Córas Pras",
"Tags Generation Prompt": "Clibeanna Giniúint Pras",
"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "",
"Tail free sampling is used to reduce the impact of less probable tokens from the output. A higher value (e.g., 2.0) will reduce the impact more, while a value of 1.0 disables this setting. (default: 1)": "Úsáidtear sampláil saor ó eireabaill chun tionchar na n-chomharthaí ón aschur nach bhfuil chomh dóchúil céanna a laghdú. Laghdóidh luach níos airde (m.sh., 2.0) an tionchar níos mó, agus díchumasaíonn luach 1.0 an socrú seo. (réamhshocraithe: 1)",
"Tap to interrupt": "Tapáil chun cur isteach",
"Tavily API Key": "Eochair API Tavily",
"Tell us more:": "Inis dúinn níos mó:",
@@ -837,30 +843,30 @@
"Text-to-Speech Engine": "Inneall téacs-go-labhra",
"Tfs Z": "TFS Z",
"Thanks for your feedback!": "Go raibh maith agat as do chuid aiseolas!",
"The Application Account DN you bind with for search": "",
"The base to search for users": "",
"The batch size determines how many text requests are processed together at once. A higher batch size can increase the performance and speed of the model, but it also requires more memory. (Default: 512)": "",
"The Application Account DN you bind with for search": "An Cuntas Feidhmchláir DN a nascann tú leis le haghaidh cuardaigh",
"The base to search for users": "An bonn chun cuardach a dhéanamh ar úsáideoirí",
"The batch size determines how many text requests are processed together at once. A higher batch size can increase the performance and speed of the model, but it also requires more memory. (Default: 512)": "Cinneann méid an bhaisc cé mhéad iarratas téacs a phróiseáiltear le chéile ag an am céanna. Is féidir le méid baisc níos airde feidhmíocht agus luas an mhúnla a mhéadú, ach éilíonn sé níos mó cuimhne freisin. (Réamhshocrú: 512)",
"The developers behind this plugin are passionate volunteers from the community. If you find this plugin helpful, please consider contributing to its development.": "Is deonacha paiseanta ón bpobal iad na forbróirí taobh thiar den bhreiseán seo. Má aimsíonn an breiseán seo cabhrach leat, smaoinigh ar rannchuidiú lena fhorbairt.",
"The evaluation leaderboard is based on the Elo rating system and is updated in real-time.": "Tá an clár ceannairí meastóireachta bunaithe ar chóras rátála Elo agus déantar é a nuashonrú i bhfíor-am.",
"The LDAP attribute that maps to the username that users use to sign in.": "",
"The LDAP attribute that maps to the username that users use to sign in.": "An tréith LDAP a mhapálann don ainm úsáideora a úsáideann úsáideoirí chun síniú isteach.",
"The leaderboard is currently in beta, and we may adjust the rating calculations as we refine the algorithm.": "Tá an clár ceannairí i béite faoi láthair, agus d'fhéadfaimis na ríomhanna rátála a choigeartú de réir mar a dhéanfaimid an t-algartam a bheachtú.",
"The maximum file size in MB. If the file size exceeds this limit, the file will not be uploaded.": "Uasmhéid an chomhaid i MB. Má sháraíonn méid an chomhaid an teorainn seo, ní uaslódófar an comhad.",
"The maximum number of files that can be used at once in chat. If the number of files exceeds this limit, the files will not be uploaded.": "An líon uasta na gcomhaid is féidir a úsáid ag an am céanna i gcomhrá. Má sháraíonn líon na gcomhaid an teorainn seo, ní uaslódófar na comhaid.",
"The score should be a value between 0.0 (0%) and 1.0 (100%).": "Ba chóir go mbeadh an scór ina luach idir 0.0 (0%) agus 1.0 (100%).",
"The temperature of the model. Increasing the temperature will make the model answer more creatively. (Default: 0.8)": "",
"The temperature of the model. Increasing the temperature will make the model answer more creatively. (Default: 0.8)": "Teocht an mhúnla. Déanfaidh méadú ar an teocht an freagra múnla níos cruthaithí. (Réamhshocrú: 0.8)",
"Theme": "Téama",
"Thinking...": "Smaointeoireacht...",
"This action cannot be undone. Do you wish to continue?": "Ní féidir an gníomh seo a chur ar ais. Ar mhaith leat leanúint ar aghaidh?",
"This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Cinntíonn sé seo go sábhálfar do chomhráite luachmhara go daingean i do bhunachar sonraí cúltaca Go raibh maith agat!",
"This is an experimental feature, it may not function as expected and is subject to change at any time.": "Is gné turgnamhach í seo, b'fhéidir nach bhfeidhmeoidh sé mar a bhíothas ag súil leis agus tá sé faoi réir athraithe ag am ar bith.",
"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. (Default: 24)": "",
"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. (Default: 128)": "",
"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. (Default: 24)": "Rialaíonn an rogha seo cé mhéad comhartha a chaomhnaítear agus an comhthéacs á athnuachan. Mar shampla, má shocraítear go 2 é, coinneofar an 2 chomhartha dheireanacha de chomhthéacs an chomhrá. Is féidir le comhthéacs a chaomhnú cabhrú le leanúnachas comhrá a choinneáil, ach dfhéadfadh sé laghdú a dhéanamh ar an gcumas freagairt do thopaicí nua. (Réamhshocrú: 24)",
"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. (Default: 128)": "Socraíonn an rogha seo an t-uaslíon comharthaí is féidir leis an tsamhail a ghiniúint ina fhreagra. Tríd an teorainn seo a mhéadú is féidir leis an tsamhail freagraí níos faide a sholáthar, ach dfhéadfadh go méadódh sé an dóchúlacht go nginfear ábhar neamhchabhrach nó nach mbaineann le hábhar. (Réamhshocrú: 128)",
"This option will delete all existing files in the collection and replace them with newly uploaded files.": "Scriosfaidh an rogha seo gach comhad atá sa bhailiúchán agus cuirfear comhaid nua-uaslódála ina n-ionad.",
"This response was generated by \"{{model}}\"": "Gin an freagra seo ag \"{{model}}\"",
"This will delete": "Scriosfaidh sé seo",
"This will delete <strong>{{NAME}}</strong> and <strong>all its contents</strong>.": "Scriosfaidh sé seo <strong>{{NAME}}</strong> agus <strong>a bhfuil ann go léir</strong>.",
"This will delete all models including custom models": "",
"This will delete all models including custom models and cannot be undone.": "",
"This will delete all models including custom models": "Scriosfaidh sé seo gach múnla lena n-áirítear samhlacha saincheaptha",
"This will delete all models including custom models and cannot be undone.": "Scriosfaidh sé seo gach samhail lena n-áirítear samhlacha saincheaptha agus ní féidir é a chealú.",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "Déanfaidh sé seo an bonn eolais a athshocrú agus gach comhad a shioncronú. Ar mhaith leat leanúint ar aghaidh?",
"Thorough explanation": "Míniú críochnúil",
"Tika": "Tika",
@@ -872,7 +878,7 @@
"Title Auto-Generation": "Teideal Auto-Generation",
"Title cannot be an empty string.": "Ní féidir leis an teideal a bheith ina teaghrán folamh.",
"Title Generation Prompt": "Pras Giniúint Teideal",
"TLS": "",
"TLS": "TLS",
"To access the available model names for downloading,": "Chun teacht ar na hainmneacha múnla atá ar fáil le híoslódáil,",
"To access the GGUF models available for downloading,": "Chun rochtain a fháil ar na múnlaí GGUF atá ar fáil le híoslódáil,",
"To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Chun rochtain a fháil ar an WebUI, déan teagmháil leis an riarthóir le do thoil. Is féidir le riarthóirí stádas úsáideora a bhainistiú ón bPainéal Riaracháin.",
@@ -890,19 +896,19 @@
"Too verbose": "Ró-fhocal",
"Tool created successfully": "Uirlis cruthaithe go rathúil",
"Tool deleted successfully": "Uirlis scriosta go rathúil",
"Tool Description": "",
"Tool ID": "",
"Tool Description": "Cur síos ar an Uirlis",
"Tool ID": "ID Uirlis",
"Tool imported successfully": "Uirlis iompórtáilte",
"Tool Name": "",
"Tool Name": "Ainm Uirlis",
"Tool updated successfully": "An uirlis nuashonraithe",
"Tools": "Uirlisí",
"Tools Access": "",
"Tools Access": "Rochtain Uirlisí",
"Tools are a function calling system with arbitrary code execution": "Is córas glaonna feidhme iad uirlisí le forghníomhú cód treallach",
"Tools have a function calling system that allows arbitrary code execution": "Tá córas glaonna feidhme ag uirlisí a cheadaíonn forghníomhú cód treallach",
"Tools have a function calling system that allows arbitrary code execution.": "Tá córas glaonna feidhme ag uirlisí a cheadaíonn forghníomhú cód treallach.",
"Top K": "Barr K",
"Top P": "Barr P",
"Transformers": "",
"Transformers": "Claochladáin",
"Trouble accessing Ollama?": "Deacracht teacht ar Ollama?",
"TTS Model": "TTS Múnla",
"TTS Settings": "Socruithe TTS",
@@ -911,12 +917,12 @@
"Type Hugging Face Resolve (Download) URL": "Cineál Hugging Face Resolve (Íoslódáil) URL",
"Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! Bhí ceist ann ag nascadh le {{provider}}.",
"UI": "UI",
"Unarchive All": "",
"Unarchive All Archived Chats": "",
"Unarchive Chat": "",
"Unlock mysteries": "",
"Unarchive All": "Díchartlannaigh Uile",
"Unarchive All Archived Chats": "Díchartlannaigh Gach Comhrá Cartlainne",
"Unarchive Chat": "Comhrá a dhíchartlannú",
"Unlock mysteries": "Díghlasáil rúndiamhra",
"Unpin": "Díphoráil",
"Unravel secrets": "",
"Unravel secrets": "Rúin a réiteach",
"Untagged": "Gan chlib",
"Update": "Nuashonraigh",
"Update and Copy Link": "Nuashonraigh agus Cóipeáil Nasc",
@@ -932,18 +938,18 @@
"Upload Files": "Uaslódáil Comhaid",
"Upload Pipeline": "Uaslódáil píblíne",
"Upload Progress": "Uaslódáil an Dul",
"URL": "",
"URL": "URL",
"URL Mode": "Mód URL",
"Use '#' in the prompt input to load and include your knowledge.": "Úsáid '#' san ionchur pras chun do chuid eolais a lódáil agus a chur san áireamh.",
"Use Gravatar": "Úsáid Gravatar",
"Use groups to group your users and assign permissions.": "",
"Use groups to group your users and assign permissions.": "Úsáid grúpaí chun d'úsáideoirí a ghrúpáil agus ceadanna a shannadh",
"Use Initials": "Úsáid ceannlitreacha",
"use_mlock (Ollama)": "use_mlock (Ollama)",
"use_mmap (Ollama)": "use_mmap (Ollama)",
"user": "úsáideoir",
"User": "Úsáideoir",
"User location successfully retrieved.": "Fuarthas suíomh an úsáideora go rathúil.",
"Username": "",
"Username": "Ainm Úsáideora",
"Users": "Úsáideoirí",
"Using the default arena model with all models. Click the plus button to add custom models.": "Ag baint úsáide as an múnla réimse réamhshocraithe le gach múnlaí. Cliceáil ar an gcnaipe móide chun múnlaí saincheaptha a chur leis.",
"Utilize": "Úsáid",
@@ -955,12 +961,12 @@
"variable to have them replaced with clipboard content.": "athróg chun ábhar gearrthaisce a chur in ionad iad.",
"Version": "Leagan",
"Version {{selectedVersion}} of {{totalVersions}}": "Leagan {{selectedVersion}} de {{totalVersions}}",
"Visibility": "",
"Visibility": "Infheictheacht",
"Voice": "Guth",
"Voice Input": "Ionchur Gutha",
"Warning": "Rabhadh",
"Warning:": "Rabhadh:",
"Warning: Enabling this will allow users to upload arbitrary code on the server.": "",
"Warning: Enabling this will allow users to upload arbitrary code on the server.": "Rabhadh: Cuirfidh sé seo ar chumas úsáideoirí cód treallach a uaslódáil ar an bhfreastalaí.",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "Rabhadh: Má nuashonraíonn tú nó má athraíonn tú do mhúnla leabaithe, beidh ort gach doiciméad a athiompórtáil.",
"Web": "Gréasán",
"Web API": "API Gréasáin",
@@ -969,29 +975,30 @@
"Web Search Engine": "Inneall Cuardaigh Gréasáin",
"Webhook URL": "URL Webhook",
"WebUI Settings": "Socruithe WebUI",
"WebUI will make requests to \"{{url}}/api/chat\"": "",
"WebUI will make requests to \"{{url}}/chat/completions\"": "",
"What are you trying to achieve?": "",
"What are you working on?": "",
"WebUI will make requests to \"{{url}}/api/chat\"": "Déanfaidh WebUI iarratais ar \"{{url}}/api/chat\"",
"WebUI will make requests to \"{{url}}/chat/completions\"": "Déanfaidh WebUI iarratais ar \"{{url}}/chat/completions\"",
"What are you trying to achieve?": "Cad atá tú ag iarraidh a bhaint amach?",
"What are you working on?": "Cad air a bhfuil tú ag obair?",
"Whats New in": "Cad atá Nua i",
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "Nuair a bheidh sé cumasaithe, freagróidh an tsamhail gach teachtaireacht comhrá i bhfíor-am, ag giniúint freagra a luaithe a sheolann an t-úsáideoir teachtaireacht. Tá an mód seo úsáideach le haghaidh feidhmchláir chomhrá beo, ach dfhéadfadh tionchar a bheith aige ar fheidhmíocht ar chrua-earraí níos moille.",
"wherever you are": "aon áit a bhfuil tú",
"Whisper (Local)": "Whisper (Áitiúil)",
"Why?": "Cén fáth?",
"Widescreen Mode": "Mód Leathanscáileán",
"Won": "Bhuaigh",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "Oibríonn sé le barr-k. Beidh téacs níos éagsúla mar thoradh ar luach níos airde (m.sh., 0.95), agus ginfidh luach níos ísle (m.sh., 0.5) téacs níos dírithe agus níos coimeádaí. (Réamhshocrú: 0.9)",
"Workspace": "Spás oibre",
"Workspace Permissions": "",
"Workspace Permissions": "Ceadanna Spás Oibre",
"Write a prompt suggestion (e.g. Who are you?)": "Scríobh moladh pras (m.sh. Cé hé tú?)",
"Write a summary in 50 words that summarizes [topic or keyword].": "Scríobh achoimre i 50 focal a dhéanann achoimre ar [ábhar nó eochairfhocal].",
"Write something...": "Scríobh rud...",
"Write your model template content here": "",
"Write your model template content here": "Scríobh do mhúnla ábhar teimpléad anseo",
"Yesterday": "Inné",
"You": "Tú",
"You can only chat with a maximum of {{maxCount}} file(s) at a time.": "Ní féidir leat comhrá a dhéanamh ach le comhad {{maxCount}} ar a mhéad ag an am.",
"You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "Is féidir leat do chuid idirghníomhaíochtaí le LLManna a phearsantú ach cuimhní cinn a chur leis tríd an gcnaipe 'Bainistigh' thíos, rud a fhágann go mbeidh siad níos cabhrach agus níos oiriúnaí duit.",
"You cannot upload an empty file.": "Ní féidir leat comhad folamh a uaslódáil.",
"You do not have permission to upload files.": "",
"You do not have permission to upload files.": "Níl cead agat comhaid a uaslódáil.",
"You have no archived conversations.": "Níl aon chomhráite cartlainne agat.",
"You have shared this chat": "Tá an comhrá seo roinnte agat",
"You're a helpful assistant.": "Is cúntóir cabhrach tú.",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "",
"Already have an account?": "Hai già un account?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "un assistente",
"and": "e",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "L'URL base AUTOMATIC1111 è obbligatorio.",
"Available list": "",
"available!": "disponibile!",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "Indietro",
@@ -234,6 +236,7 @@
"Delete User": "Elimina utente",
"Deleted {{deleteModelTag}}": "Eliminato {{deleteModelTag}}",
"Deleted {{name}}": "Eliminato {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Descrizione",
"Didn't fully follow instructions": "Non ha seguito completamente le istruzioni",
@@ -326,6 +329,7 @@
"Enter language codes": "Inserisci i codici lingua",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "Inserisci il tag del modello (ad esempio {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Inserisci il numero di passaggi (ad esempio 50)",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "Nascondi",
"Host": "",
"How can I help you today?": "Come posso aiutarti oggi?",
"How would you rate this response?": "",
"Hybrid Search": "Ricerca ibrida",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "Contenuto del file modello",
"Models": "Modelli",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "Altro",
"Name": "Nome",
@@ -978,6 +984,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "",
"Why?": "",
"Widescreen Mode": "",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "通話中に音声の割り込みを許可",
"Already have an account?": "すでにアカウントをお持ちですか?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "アシスタント",
"and": "および",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 ベース URL が必要です。",
"Available list": "利用可能リスト",
"available!": "利用可能!",
"Awful": "",
"Azure AI Speech": "AzureAIスピーチ",
"Azure Region": "Azureリージョン",
"Back": "戻る",
@@ -234,6 +236,7 @@
"Delete User": "ユーザーを削除",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} を削除しました",
"Deleted {{name}}": "{{name}}を削除しました",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "説明",
"Didn't fully follow instructions": "説明に沿って操作していませんでした",
@@ -326,6 +329,7 @@
"Enter language codes": "言語コードを入力してください",
"Enter Model ID": "モデルIDを入力してください。",
"Enter model tag (e.g. {{modelTag}})": "モデルタグを入力してください (例: {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "ステップ数を入力してください (例: 50)",
"Enter Sampler (e.g. Euler a)": "サンプラーを入力してください(e.g. Euler a)。",
"Enter Scheduler (e.g. Karras)": "スケジューラーを入力してください。(e.g. Karras)",
@@ -449,6 +453,7 @@
"Hide": "非表示",
"Host": "",
"How can I help you today?": "今日はどのようにお手伝いしましょうか?",
"How would you rate this response?": "",
"Hybrid Search": "ブリッジ検索",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "モデルファイルの内容",
"Models": "モデル",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "もっと見る",
"Name": "名前",
@@ -976,6 +982,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "",
"Why?": "",
"Widescreen Mode": "ワイドスクリーンモード",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "",
"Already have an account?": "უკვე გაქვს ანგარიში?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "ასისტენტი",
"and": "და",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 საბაზისო მისამართი აუცილებელია",
"Available list": "",
"available!": "ხელმისაწვდომია!",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "უკან",
@@ -234,6 +236,7 @@
"Delete User": "მომხმარებლის წაშლა",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} წაშლილია",
"Deleted {{name}}": "Deleted {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "აღწერა",
"Didn't fully follow instructions": "ვერ ყველა ინფორმაციისთვის ვერ ხელახლა ჩაწერე",
@@ -326,6 +329,7 @@
"Enter language codes": "შეიყვანეთ ენის კოდი",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "შეიყვანეთ მოდელის ტეგი (მაგ. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "შეიყვანეთ ნაბიჯების რაოდენობა (მაგ. 50)",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "დამალვა",
"Host": "",
"How can I help you today?": "როგორ შემიძლია დაგეხმარო დღეს?",
"How would you rate this response?": "",
"Hybrid Search": "ჰიბრიდური ძებნა",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "მოდელური ფაილის კონტენტი",
"Models": "მოდელები",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "ვრცლად",
"Name": "სახელი",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "",
"Why?": "",
"Widescreen Mode": "",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "음성 기능에서 음성 방해 허용",
"Already have an account?": "이미 계정이 있으신가요?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "어시스턴트",
"and": "그리고",
"and {{COUNT}} more": "그리고 {{COUNT}} 더",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 기본 URL 설정이 필요합니다.",
"Available list": "가능한 목록",
"available!": "사용 가능!",
"Awful": "",
"Azure AI Speech": "Azure AI 음성",
"Azure Region": "Azure 지역",
"Back": "뒤로가기",
@@ -234,6 +236,7 @@
"Delete User": "사용자 삭제",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} 삭제됨",
"Deleted {{name}}": "{{name}}을(를) 삭제했습니다.",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "설명",
"Didn't fully follow instructions": "완전히 지침을 따르지 않음",
@@ -326,6 +329,7 @@
"Enter language codes": "언어 코드 입력",
"Enter Model ID": "모델 ID 입력",
"Enter model tag (e.g. {{modelTag}})": "모델 태그 입력(예: {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "단계 수 입력(예: 50)",
"Enter Sampler (e.g. Euler a)": "샘플러 입력 (예: 오일러 a(Euler a))",
"Enter Scheduler (e.g. Karras)": "스케쥴러 입력 (예: 카라스(Karras))",
@@ -449,6 +453,7 @@
"Hide": "숨기기",
"Host": "",
"How can I help you today?": "오늘 어떻게 도와드릴까요?",
"How would you rate this response?": "",
"Hybrid Search": "하이브리드 검색",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "ID",
@@ -565,6 +570,7 @@
"Modelfile Content": "Modelfile 내용",
"Models": "모델",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "더보기",
"More": "더보기",
"Name": "이름",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "Whisper (로컬)",
"Why?": "",
"Widescreen Mode": "와이드스크린 모드",
"Won": "이김",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "Leisti pertraukimą skambučio metu",
"Already have an account?": "Ar jau turite paskyrą?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "assistentas",
"and": "ir",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 bazės nuoroda reikalinga.",
"Available list": "",
"available!": "prieinama!",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "Atgal",
@@ -234,6 +236,7 @@
"Delete User": "Ištrinti naudotoją",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} ištrinta",
"Deleted {{name}}": "Ištrinta {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Aprašymas",
"Didn't fully follow instructions": "Pilnai nesekė instrukcijų",
@@ -326,6 +329,7 @@
"Enter language codes": "Įveskite kalbos kodus",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "Įveskite modelio žymą (pvz. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Įveskite žingsnių kiekį (pvz. 50)",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "Paslėpti",
"Host": "",
"How can I help you today?": "Kuo galėčiau Jums padėti ?",
"How would you rate this response?": "",
"Hybrid Search": "Hibridinė paieška",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Suprantu veiksmų ir kodo vykdymo rizikas.",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "Modelio failo turinys",
"Models": "Modeliai",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "Daugiau",
"Name": "Pavadinimas",
@@ -979,6 +985,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "Whisper (lokalus)",
"Why?": "",
"Widescreen Mode": "Plataus ekrano rėžimas",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "Benarkan gangguan suara dalam panggilan",
"Already have an account?": "Telah mempunyai akaun?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "seorang pembantu",
"and": "dan",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "URL Asas AUTOMATIC1111 diperlukan.",
"Available list": "",
"available!": "tersedia!",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "Kembali",
@@ -234,6 +236,7 @@
"Delete User": "Padam Pengguna",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} dipadam",
"Deleted {{name}}": "{{name}} dipadam",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Penerangan",
"Didn't fully follow instructions": "Tidak mengikut arahan sepenuhnya",
@@ -326,6 +329,7 @@
"Enter language codes": "Masukkan kod bahasa",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "Masukkan tag model (cth {{ modelTag }})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Masukkan Bilangan Langkah (cth 50)",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "Sembunyi",
"Host": "",
"How can I help you today?": "Bagaimana saya boleh membantu anda hari ini?",
"How would you rate this response?": "",
"Hybrid Search": "Carian Hibrid",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Saya mengakui bahawa saya telah membaca dan saya memahami implikasi tindakan saya. Saya sedar tentang risiko yang berkaitan dengan melaksanakan kod sewenang-wenangnya dan saya telah mengesahkan kebolehpercayaan sumber tersebut.",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "Kandungan Modelfail",
"Models": "Model",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "Lagi",
"Name": "Nama",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "Whisper (Local)",
"Why?": "",
"Widescreen Mode": "Mod Skrin Lebar",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "Muliggjør stemmeavbrytelse i samtaler",
"Already have an account?": "Har du allerede en konto?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "Alternativ til top_p, og har som mål å sikre en balanse mellom kvalitet og variasjon. Parameteren p representerer minimumssannsynligheten for at et token skal vurderes, i forhold til sannsynligheten for det mest sannsynlige tokenet. Hvis p for eksempel er 0,05 og det mest sannsynlige tokenet har en sannsynlighet på 0,9, filtreres logits med en verdi på mindre enn 0,045 bort. (Standard: 0,0)",
"Amazing": "",
"an assistant": "en assistent",
"and": "og",
"and {{COUNT}} more": "og {{COUNT}} til",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 Grunn-URL kreves.",
"Available list": "Tilgjengelig liste",
"available!": "tilgjengelig!",
"Awful": "",
"Azure AI Speech": "Azure AI-tale",
"Azure Region": "Azure område",
"Back": "Tilbake",
@@ -234,6 +236,7 @@
"Delete User": "Slett bruker",
"Deleted {{deleteModelTag}}": "Slettet {{deleteModelTag}}",
"Deleted {{name}}": "Slettet {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "Beskriv kunnskapsbasen din og målene dine",
"Description": "Beskrivelse",
"Didn't fully follow instructions": "Fulgte ikke instruksjonene fullstendig",
@@ -326,6 +329,7 @@
"Enter language codes": "Angi språkkoder",
"Enter Model ID": "Angi modellens ID",
"Enter model tag (e.g. {{modelTag}})": "Angi modellens etikett (f.eks. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Angi antall steg (f.eks. 50)",
"Enter Sampler (e.g. Euler a)": "Angi Sampler (e.g. Euler a)",
"Enter Scheduler (e.g. Karras)": "Angi Scheduler (f.eks. Karras)",
@@ -449,6 +453,7 @@
"Hide": "Skjul",
"Host": "Host",
"How can I help you today?": "Hva kan jeg hjelpe deg med i dag?",
"How would you rate this response?": "",
"Hybrid Search": "Hybrid-søk",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Jeg bekrefter at jeg har lest og forstår konsekvensene av mine handlinger. Jeg er klar over risikoen forbundet med å kjøre vilkårlig kode, og jeg har verifisert kildens pålitelighet.",
"ID": "ID",
@@ -565,6 +570,7 @@
"Modelfile Content": "Modellfilinnhold",
"Models": "Modeller",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "mer",
"More": "Mer",
"Name": "Navn",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "Hvis denne modusen er aktivert, svarer modellen på alle chattemeldinger i sanntid, og genererer et svar så snart brukeren sender en melding. Denne modusen er nyttig for live chat-applikasjoner, men kan påvirke ytelsen på tregere maskinvare.",
"wherever you are": "uansett hvor du er",
"Whisper (Local)": "Whisper (Lokal)",
"Why?": "",
"Widescreen Mode": "Bredskjermmodus",
"Won": "Vant",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "Fungerer sammen med top-k. En høyere verdi (f.eks. 0,95) vil føre til mer mangfoldig tekst, mens en lavere verdi (f.eks. 0,5) vil generere mer fokusert og konservativ tekst. (Standard: 0,9)",
File diff suppressed because it is too large Load Diff
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "",
"Already have an account?": "ਪਹਿਲਾਂ ਹੀ ਖਾਤਾ ਹੈ?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "ਇੱਕ ਸਹਾਇਕ",
"and": "ਅਤੇ",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 ਬੇਸ URL ਦੀ ਲੋੜ ਹੈ।",
"Available list": "",
"available!": "ਉਪਲਬਧ ਹੈ!",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "ਵਾਪਸ",
@@ -234,6 +236,7 @@
"Delete User": "ਉਪਭੋਗਤਾ ਮਿਟਾਓ",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} ਮਿਟਾਇਆ ਗਿਆ",
"Deleted {{name}}": "ਮਿਟਾ ਦਿੱਤਾ ਗਿਆ {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "ਵਰਣਨਾ",
"Didn't fully follow instructions": "ਹਦਾਇਤਾਂ ਨੂੰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਫਾਲੋ ਨਹੀਂ ਕੀਤਾ",
@@ -326,6 +329,7 @@
"Enter language codes": "ਭਾਸ਼ਾ ਕੋਡ ਦਰਜ ਕਰੋ",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "ਮਾਡਲ ਟੈਗ ਦਰਜ ਕਰੋ (ਉਦਾਹਰਣ ਲਈ {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "ਕਦਮਾਂ ਦੀ ਗਿਣਤੀ ਦਰਜ ਕਰੋ (ਉਦਾਹਰਣ ਲਈ 50)",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "ਲੁਕਾਓ",
"Host": "",
"How can I help you today?": "ਮੈਂ ਅੱਜ ਤੁਹਾਡੀ ਕਿਵੇਂ ਮਦਦ ਕਰ ਸਕਦਾ ਹਾਂ?",
"How would you rate this response?": "",
"Hybrid Search": "ਹਾਈਬ੍ਰਿਡ ਖੋਜ",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "ਮਾਡਲਫਾਈਲ ਸਮੱਗਰੀ",
"Models": "ਮਾਡਲ",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "ਹੋਰ",
"Name": "ਨਾਮ",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "",
"Why?": "",
"Widescreen Mode": "",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "",
"Already have an account?": "Masz już konto?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "asystent",
"and": "i",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "Podstawowy adres URL AUTOMATIC1111 jest wymagany.",
"Available list": "",
"available!": "dostępny!",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "Wstecz",
@@ -234,6 +236,7 @@
"Delete User": "Usuń użytkownika",
"Deleted {{deleteModelTag}}": "Usunięto {{deleteModelTag}}",
"Deleted {{name}}": "Usunięto {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Opis",
"Didn't fully follow instructions": "Nie postępował zgodnie z instrukcjami",
@@ -326,6 +329,7 @@
"Enter language codes": "Wprowadź kody języków",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "Wprowadź tag modelu (np. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Wprowadź liczbę kroków (np. 50)",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "Ukryj",
"Host": "",
"How can I help you today?": "Jak mogę Ci dzisiaj pomóc?",
"How would you rate this response?": "",
"Hybrid Search": "Szukanie hybrydowe",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "Zawartość pliku modelu",
"Models": "Modele",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "Więcej",
"Name": "Nazwa",
@@ -979,6 +985,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "",
"Why?": "",
"Widescreen Mode": "",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "Permitir Interrupção de Voz na Chamada",
"Already have an account?": "Já tem uma conta?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "um assistente",
"and": "e",
"and {{COUNT}} more": "e {{COUNT}} mais",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "URL Base AUTOMATIC1111 é necessária.",
"Available list": "Lista disponível",
"available!": "disponível!",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "Voltar",
@@ -234,6 +236,7 @@
"Delete User": "Deletar Usuário",
"Deleted {{deleteModelTag}}": "Deletado {{deleteModelTag}}",
"Deleted {{name}}": "Deletado {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "Descreva sua base de conhecimento e objetivos",
"Description": "Descrição",
"Didn't fully follow instructions": "Não seguiu completamente as instruções",
@@ -326,6 +329,7 @@
"Enter language codes": "Digite os códigos de idioma",
"Enter Model ID": "Digite o ID do modelo",
"Enter model tag (e.g. {{modelTag}})": "Digite a tag do modelo (por exemplo, {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Digite o Número de Passos (por exemplo, 50)",
"Enter Sampler (e.g. Euler a)": "Digite o Sampler (por exemplo, Euler a)",
"Enter Scheduler (e.g. Karras)": "Digite o Agendador (por exemplo, Karras)",
@@ -449,6 +453,7 @@
"Hide": "Ocultar",
"Host": "Servidor",
"How can I help you today?": "Como posso ajudar você hoje?",
"How would you rate this response?": "",
"Hybrid Search": "Pesquisa Híbrida",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Eu reconheço que li e entendi as implicações da minha ação. Estou ciente dos riscos associados à execução de código arbitrário e verifiquei a confiabilidade da fonte.",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "Conteúdo do Arquivo do Modelo",
"Models": "Modelos",
"Models Access": "Acesso aos Modelos",
"Mojeek Search API Key": "",
"more": "mais",
"More": "Mais",
"Name": "Nome",
@@ -978,6 +984,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "Quando habilitado, o modelo responderá a cada mensagem de chat em tempo real, gerando uma resposta assim que o usuário enviar uma mensagem. Este modo é útil para aplicativos de chat ao vivo, mas pode impactar o desempenho em hardware mais lento.",
"wherever you are": "Onde quer que você esteja.",
"Whisper (Local)": "Whisper (Local)",
"Why?": "",
"Widescreen Mode": "Modo Tela Cheia",
"Won": "Positivo",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "Funciona em conjunto com o top-k. Um valor mais alto (por exemplo, 0,95) levará a um texto mais diversificado, enquanto um valor mais baixo (por exemplo, 0,5) gerará um texto mais focado e conservador. (Padrão: 0,9)",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "",
"Already have an account?": "Já tem uma conta?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "um assistente",
"and": "e",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "O URL Base do AUTOMATIC1111 é obrigatório.",
"Available list": "",
"available!": "disponível!",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "Voltar",
@@ -234,6 +236,7 @@
"Delete User": "Apagar Utilizador",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} apagado",
"Deleted {{name}}": "Apagado {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Descrição",
"Didn't fully follow instructions": "Não seguiu instruções com precisão",
@@ -326,6 +329,7 @@
"Enter language codes": "Escreva os códigos de idioma",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "Escreva a tag do modelo (por exemplo, {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Escreva o Número de Etapas (por exemplo, 50)",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "Ocultar",
"Host": "",
"How can I help you today?": "Como posso ajudá-lo hoje?",
"How would you rate this response?": "",
"Hybrid Search": "Pesquisa Híbrida",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "Conteúdo do Ficheiro do Modelo",
"Models": "Modelos",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "Mais",
"Name": "Nome",
@@ -978,6 +984,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "Whisper (Local)",
"Why?": "",
"Widescreen Mode": "Modo Widescreen",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "Permite Întreruperea Vocii în Apel",
"Already have an account?": "Deja ai un cont?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "un asistent",
"and": "și",
"and {{COUNT}} more": "și {{COUNT}} mai multe",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "Este necesar URL-ul Bază AUTOMATIC1111.",
"Available list": "Listă disponibilă",
"available!": "disponibil!",
"Awful": "",
"Azure AI Speech": "Azure AI Speech este un serviciu care face parte din suita de servicii cognitive oferite de Microsoft Azure. Acesta permite integrarea capabilităților de recunoaștere vocală, generare a vorbirii și transcriere automată în aplicații. Serviciul oferă dezvoltatorilor posibilitatea de a crea aplicații care pot converti vorbirea în text, genera vorbire naturală din text sau traduce între limbi. Azure AI Speech este util în diverse scenarii, cum ar fi asistenți vocali, aplicații de servicii pentru clienți sau instrumente de accesibilitate, facilitând o interacțiune mai naturală între utilizatori și tehnologie.",
"Azure Region": "Regiune Azure",
"Back": "Înapoi",
@@ -234,6 +236,7 @@
"Delete User": "Șterge Utilizatorul",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} șters",
"Deleted {{name}}": "{{name}} șters",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Descriere",
"Didn't fully follow instructions": "Nu a urmat complet instrucțiunile",
@@ -326,6 +329,7 @@
"Enter language codes": "Introduceți codurile limbilor",
"Enter Model ID": "Introdu codul modelului",
"Enter model tag (e.g. {{modelTag}})": "Introduceți eticheta modelului (de ex. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Introduceți Numărul de Pași (de ex. 50)",
"Enter Sampler (e.g. Euler a)": "Introduce Sampler (de exemplu, Euler a)",
"Enter Scheduler (e.g. Karras)": "Introduceți Programatorul (de exemplu, Karras)",
@@ -449,6 +453,7 @@
"Hide": "Ascunde",
"Host": "",
"How can I help you today?": "Cum te pot ajuta astăzi?",
"How would you rate this response?": "",
"Hybrid Search": "Căutare Hibridă",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Recunosc că am citit și înțeleg implicațiile acțiunii mele. Sunt conștient de riscurile asociate cu executarea codului arbitrar și am verificat fiabilitatea sursei.",
"ID": "ID",
@@ -565,6 +570,7 @@
"Modelfile Content": "Conținutul Fișierului Model",
"Models": "Modele",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "mai mult",
"More": "Mai multe",
"Name": "Nume",
@@ -978,6 +984,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "Whisper (Local)",
"Why?": "",
"Widescreen Mode": "Mod Ecran Larg",
"Won": "Câștigat",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "Разрешить прерывание голоса во время вызова",
"Already have an account?": "У вас уже есть учетная запись?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "ассистент",
"and": "и",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "Необходим базовый адрес URL AUTOMATIC1111.",
"Available list": "Список доступных",
"available!": "доступно!",
"Awful": "",
"Azure AI Speech": "Azure AI Speech",
"Azure Region": "Регион Azure",
"Back": "Назад",
@@ -234,6 +236,7 @@
"Delete User": "Удалить пользователя",
"Deleted {{deleteModelTag}}": "Удалено {{deleteModelTag}}",
"Deleted {{name}}": "Удалено {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Описание",
"Didn't fully follow instructions": "Не полностью следует инструкциям",
@@ -326,6 +329,7 @@
"Enter language codes": "Введите коды языков",
"Enter Model ID": "Введите ID модели",
"Enter model tag (e.g. {{modelTag}})": "Введите тег модели (например, {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Введите количество шагов (например, 50)",
"Enter Sampler (e.g. Euler a)": "Введите сэмплер (например, Euler a)",
"Enter Scheduler (e.g. Karras)": "Введите планировщик (например, Karras)",
@@ -449,6 +453,7 @@
"Hide": "Скрыть",
"Host": "",
"How can I help you today?": "Чем я могу помочь вам сегодня?",
"How would you rate this response?": "",
"Hybrid Search": "Гибридная поисковая система",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Я подтверждаю, что прочитал и осознаю последствия своих действий. Я осознаю риски, связанные с выполнением произвольного кода, и я проверил достоверность источника.",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "Содержимое файла модели",
"Models": "Модели",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "Больше",
"Name": "Имя",
@@ -979,6 +985,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "Whisper (Локально)",
"Why?": "",
"Widescreen Mode": "Широкоэкранный режим",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "",
"Already have an account?": "Већ имате налог?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "помоћник",
"and": "и",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "Потребна је основна адреса за AUTOMATIC1111.",
"Available list": "",
"available!": "доступно!",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "Назад",
@@ -234,6 +236,7 @@
"Delete User": "Обриши корисника",
"Deleted {{deleteModelTag}}": "Обрисано {{deleteModelTag}}",
"Deleted {{name}}": "Избрисано {{наме}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Опис",
"Didn't fully follow instructions": "Упутства нису праћена у потпуности",
@@ -326,6 +329,7 @@
"Enter language codes": "Унесите кодове језика",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "Унесите ознаку модела (нпр. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Унесите број корака (нпр. 50)",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "Сакриј",
"Host": "",
"How can I help you today?": "Како могу да вам помогнем данас?",
"How would you rate this response?": "",
"Hybrid Search": "Хибридна претрага",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "Садржај модел-датотеке",
"Models": "Модели",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "Више",
"Name": "Име",
@@ -978,6 +984,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "",
"Why?": "",
"Widescreen Mode": "",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "",
"Already have an account?": "Har du redan ett konto?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "en assistent",
"and": "och",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 bas-URL krävs.",
"Available list": "",
"available!": "tillgänglig!",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "Tillbaka",
@@ -234,6 +236,7 @@
"Delete User": "Radera användare",
"Deleted {{deleteModelTag}}": "Raderad {{deleteModelTag}}",
"Deleted {{name}}": "Borttagen {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Beskrivning",
"Didn't fully follow instructions": "Följde inte instruktionerna",
@@ -326,6 +329,7 @@
"Enter language codes": "Skriv språkkoder",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "Ange modelltagg (t.ex. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Ange antal steg (t.ex. 50)",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "Dölj",
"Host": "",
"How can I help you today?": "Hur kan jag hjälpa dig idag?",
"How would you rate this response?": "",
"Hybrid Search": "Hybrid sökning",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "Modelfilens innehåll",
"Models": "Modeller",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "Mer",
"Name": "Namn",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "Whisper (lokal)",
"Why?": "",
"Widescreen Mode": "Bredbildsläge",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "อนุญาตการแทรกเสียงในสาย",
"Already have an account?": "มีบัญชีอยู่แล้ว?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "ผู้ช่วย",
"and": "และ",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "ต้องการ URL ฐานของ AUTOMATIC1111",
"Available list": "",
"available!": "พร้อมใช้งาน!",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "กลับ",
@@ -234,6 +236,7 @@
"Delete User": "ลบผู้ใช้",
"Deleted {{deleteModelTag}}": "ลบ {{deleteModelTag}}",
"Deleted {{name}}": "ลบ {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "คำอธิบาย",
"Didn't fully follow instructions": "ไม่ได้ปฏิบัติตามคำแนะนำทั้งหมด",
@@ -326,6 +329,7 @@
"Enter language codes": "ใส่รหัสภาษา",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "ใส่แท็กโมเดล (เช่น {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "ใส่จำนวนขั้นตอน (เช่น 50)",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "ซ่อน",
"Host": "",
"How can I help you today?": "วันนี้ฉันจะช่วยอะไรคุณได้บ้าง?",
"How would you rate this response?": "",
"Hybrid Search": "การค้นหาแบบไฮบริด",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "ฉันรับทราบว่าฉันได้อ่านและเข้าใจผลกระทบของการกระทำของฉัน ฉันทราบถึงความเสี่ยงที่เกี่ยวข้องกับการเรียกใช้โค้ดโดยพลการและฉันได้ตรวจสอบความน่าเชื่อถือของแหล่งที่มาแล้ว",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "เนื้อหาของไฟล์โมเดล",
"Models": "โมเดล",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "เพิ่มเติม",
"Name": "ชื่อ",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "Whisper (โลคอล)",
"Why?": "",
"Widescreen Mode": "โหมดหน้าจอกว้าง",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "",
"Already have an account?": "",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "",
"and": "",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "",
"Available list": "",
"available!": "",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "",
@@ -234,6 +236,7 @@
"Delete User": "",
"Deleted {{deleteModelTag}}": "",
"Deleted {{name}}": "",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "",
"Didn't fully follow instructions": "",
@@ -326,6 +329,7 @@
"Enter language codes": "",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "",
"Host": "",
"How can I help you today?": "",
"How would you rate this response?": "",
"Hybrid Search": "",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "",
"Models": "",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "",
"Name": "",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "",
"Why?": "",
"Widescreen Mode": "",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "Aramada Ses Kesintisine İzin Ver",
"Already have an account?": "Zaten bir hesabınız mı var?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "bir asistan",
"and": "ve",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 Temel URL gereklidir.",
"Available list": "Mevcut liste",
"available!": "mevcut!",
"Awful": "",
"Azure AI Speech": "Azure AI Konuşma",
"Azure Region": "Azure Bölgesi",
"Back": "Geri",
@@ -234,6 +236,7 @@
"Delete User": "Kullanıcıyı Sil",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} silindi",
"Deleted {{name}}": "{{name}} silindi",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Açıklama",
"Didn't fully follow instructions": "Talimatları tam olarak takip etmedi",
@@ -326,6 +329,7 @@
"Enter language codes": "Dil kodlarını girin",
"Enter Model ID": "Model ID'sini Girin",
"Enter model tag (e.g. {{modelTag}})": "Model etiketini girin (örn. {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Adım Sayısını Girin (örn. 50)",
"Enter Sampler (e.g. Euler a)": "Örnekleyiciyi Girin (örn. Euler a)",
"Enter Scheduler (e.g. Karras)": "Zamanlayıcıyı Girin (örn. Karras)",
@@ -449,6 +453,7 @@
"Hide": "Gizle",
"Host": "Ana bilgisayar",
"How can I help you today?": "Bugün size nasıl yardımcı olabilirim?",
"How would you rate this response?": "",
"Hybrid Search": "Karma Arama",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Eylemimin sonuçlarını okuduğumu ve anladığımı kabul ediyorum. Rastgele kod çalıştırmayla ilgili risklerin farkındayım ve kaynağın güvenilirliğini doğruladım.",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "Model Dosyası İçeriği",
"Models": "Modeller",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "Daha Fazla",
"Name": "Ad",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "Whisper (Yerel)",
"Why?": "",
"Widescreen Mode": "Geniş Ekran Modu",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "Дозволити переривання голосу під час виклику",
"Already have an account?": "Вже є обліковий запис?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "Альтернатива параметру top_p, яка має на меті забезпечити баланс якості та різноманітності. Параметр p представляє мінімальну ймовірність для того, щоб токен був врахований, відносно ймовірності найбільш ймовірного токена. Наприклад, при p=0.05 і найбільш імовірному токені з ймовірністю 0.9, логіти зі значенням менше 0.045 будуть відфільтровані. (За замовчуванням: 0.0)",
"Amazing": "",
"an assistant": "асистента",
"and": "та",
"and {{COUNT}} more": "та ще {{COUNT}}",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "Необхідна URL-адреса AUTOMATIC1111.",
"Available list": "Список доступності",
"available!": "доступно!",
"Awful": "",
"Azure AI Speech": "Мовлення Azure AI",
"Azure Region": "Регіон Azure",
"Back": "Назад",
@@ -234,6 +236,7 @@
"Delete User": "Видалити користувача",
"Deleted {{deleteModelTag}}": "Видалено {{deleteModelTag}}",
"Deleted {{name}}": "Видалено {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "Опишіть вашу базу знань та цілі",
"Description": "Опис",
"Didn't fully follow instructions": "Не повністю дотримувалися інструкцій",
@@ -326,6 +329,7 @@
"Enter language codes": "Введіть мовні коди",
"Enter Model ID": "Введіть ID моделі",
"Enter model tag (e.g. {{modelTag}})": "Введіть тег моделі (напр., {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Введіть кількість кроків (напр., 50)",
"Enter Sampler (e.g. Euler a)": "Введіть семплер (напр., Euler a)",
"Enter Scheduler (e.g. Karras)": "Введіть планувальник (напр., Karras)",
@@ -449,6 +453,7 @@
"Hide": "Приховати",
"Host": "Хост",
"How can I help you today?": "Чим я можу допомогти вам сьогодні?",
"How would you rate this response?": "",
"Hybrid Search": "Гібридний пошук",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Я підтверджую, що прочитав і розумію наслідки своїх дій. Я усвідомлюю ризики, пов'язані з виконанням довільного коду, і перевірив надійність джерела.",
"ID": "Ідентифікатор",
@@ -565,6 +570,7 @@
"Modelfile Content": "Вміст файлу моделі",
"Models": "Моделі",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "більше",
"More": "Більше",
"Name": "Ім'я",
@@ -979,6 +985,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "Коли активовано, модель буде відповідати на кожне повідомлення чату в режимі реального часу, генеруючи відповідь, як тільки користувач надішле повідомлення. Цей режим корисний для застосувань життєвих вітань чатів, але може позначитися на продуктивності на повільнішому апаратному забезпеченні.",
"wherever you are": "де б ви не були",
"Whisper (Local)": "Whisper (Локально)",
"Why?": "",
"Widescreen Mode": "Широкоекранний режим",
"Won": "Переможець",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "Працює разом з top-k. Більше значення (напр., 0.95) приведе до більш різноманітного тексту, тоді як менше значення (напр., 0.5) згенерує більш зосереджений і консервативний текст. (За замовчуванням: 0.9)",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "کال میں آواز کی مداخلت کی اجازت دیں",
"Already have an account?": "کیا پہلے سے اکاؤنٹ موجود ہے؟",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "معاون",
"and": "اور",
"and {{COUNT}} more": "اور {{COUNT}} مزید",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 بنیادی URL درکار ہے",
"Available list": "دستیاب فہرست",
"available!": "دستیاب!",
"Awful": "",
"Azure AI Speech": "ایژور اے آئی اسپیچ",
"Azure Region": "ایزور ریجن",
"Back": "واپس",
@@ -234,6 +236,7 @@
"Delete User": "صارف کو حذف کریں",
"Deleted {{deleteModelTag}}": "{{deleteModelTag}} حذف کر دیا گیا",
"Deleted {{name}}": "حذف کر دیا گیا {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "تفصیل",
"Didn't fully follow instructions": "ہدایات کو مکمل طور پر نہیں سمجھا",
@@ -326,6 +329,7 @@
"Enter language codes": "زبان کے کوڈ درج کریں",
"Enter Model ID": "ماڈل آئی ڈی درج کریں",
"Enter model tag (e.g. {{modelTag}})": "ماڈل ٹیگ داخل کریں (مثال کے طور پر {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "درج کریں مراحل کی تعداد (جیسے 50)",
"Enter Sampler (e.g. Euler a)": "نمونہ درج کریں (مثال: آئلر a)",
"Enter Scheduler (e.g. Karras)": "شیڈیولر درج کریں (مثلاً Karras)",
@@ -449,6 +453,7 @@
"Hide": "چھپائیں",
"Host": "",
"How can I help you today?": "میں آج آپ کی کس طرح مدد کر سکتا ہوں؟",
"How would you rate this response?": "",
"Hybrid Search": "مشترکہ تلاش",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "میں اقرار کرتا ہوں کہ میں نے پڑھ لیا ہے اور میں اپنی کارروائی کے مضمرات سمجھتا ہوں میں اس بات سے واقف ہوں کہ بلاوجہ کوڈ چلانے کے ساتھ منسلک خطرات ہوتے ہیں اور میں نے ماخذ کی اعتمادیت کی تصدیق کی ہے",
"ID": "شناخت",
@@ -565,6 +570,7 @@
"Modelfile Content": "ماڈل فائل مواد",
"Models": "ماڈلز",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "مزید",
"More": "مزید",
"Name": "نام",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "سرگوشی (مقامی)",
"Why?": "",
"Widescreen Mode": "وائڈ اسکرین موڈ",
"Won": "جیتا",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "Cho phép gián đoạn giọng nói trong cuộc gọi",
"Already have an account?": "Bạn đã có tài khoản?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "trợ lý",
"and": "và",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "Base URL của AUTOMATIC1111 là bắt buộc.",
"Available list": "",
"available!": "có sẵn!",
"Awful": "",
"Azure AI Speech": "",
"Azure Region": "",
"Back": "Quay lại",
@@ -234,6 +236,7 @@
"Delete User": "Xóa người dùng",
"Deleted {{deleteModelTag}}": "Đã xóa {{deleteModelTag}}",
"Deleted {{name}}": "Đã xóa {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "Mô tả",
"Didn't fully follow instructions": "Không tuân theo chỉ dẫn một cách đầy đủ",
@@ -326,6 +329,7 @@
"Enter language codes": "Nhập mã ngôn ngữ",
"Enter Model ID": "",
"Enter model tag (e.g. {{modelTag}})": "Nhập thẻ mô hình (vd: {{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "Nhập số Steps (vd: 50)",
"Enter Sampler (e.g. Euler a)": "",
"Enter Scheduler (e.g. Karras)": "",
@@ -449,6 +453,7 @@
"Hide": "Ẩn",
"Host": "",
"How can I help you today?": "Tôi có thể giúp gì cho bạn hôm nay?",
"How would you rate this response?": "",
"Hybrid Search": "Tìm kiếm Hybrid",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "Tôi thừa nhận rằng tôi đã đọc và tôi hiểu ý nghĩa của hành động của mình. Tôi nhận thức được những rủi ro liên quan đến việc thực thi mã tùy ý và tôi đã xác minh độ tin cậy của nguồn.",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "Nội dung Tệp Mô hình",
"Models": "Mô hình",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "Thêm",
"Name": "Tên",
@@ -976,6 +982,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "",
"Why?": "",
"Widescreen Mode": "Chế độ màn hình rộng",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
+80 -73
View File
@@ -11,14 +11,14 @@
"A task model is used when performing tasks such as generating titles for chats and web search queries": "任务模型用于执行生成对话标题和联网搜索查询等任务",
"a user": "用户",
"About": "关于",
"Access": "",
"Access Control": "",
"Accessible to all users": "",
"Access": "访问",
"Access Control": "访问控制",
"Accessible to all users": "对所有用户开放",
"Account": "账号",
"Account Activation Pending": "账号待激活",
"Accurate information": "提供的信息很准确",
"Actions": "自动化",
"Activate this command by typing \"/{{COMMAND}}\" to chat input.": "",
"Activate this command by typing \"/{{COMMAND}}\" to chat input.": "通过输入 \"/{{COMMAND}}\" 激活此命令",
"Active Users": "当前在线用户",
"Add": "添加",
"Add a model ID": "添加一个模型ID",
@@ -30,14 +30,14 @@
"Add content here": "在此添加内容",
"Add custom prompt": "添加自定义提示词",
"Add Files": "添加文件",
"Add Group": "",
"Add Group": "添加权限组",
"Add Memory": "添加记忆",
"Add Model": "添加模型",
"Add Tag": "添加标签",
"Add Tags": "添加标签",
"Add text content": "添加文本内容",
"Add User": "添加用户",
"Add User Group": "",
"Add User Group": "添加权限组",
"Adjusting these settings will apply changes universally to all users.": "调整这些设置将会对所有用户应用更改。",
"admin": "管理员",
"Admin": "管理员联系方式",
@@ -48,17 +48,18 @@
"Advanced Params": "高级参数",
"All chats": "所有对话",
"All Documents": "所有文档",
"All models deleted successfully": "",
"Allow Chat Delete": "",
"All models deleted successfully": "所有模型删除成功",
"Allow Chat Delete": "允许删除对话记录",
"Allow Chat Deletion": "允许删除对话记录",
"Allow Chat Edit": "",
"Allow File Upload": "",
"Allow Chat Edit": "允许编辑对话记录",
"Allow File Upload": "允许上传文件",
"Allow non-local voices": "允许调用非本地音色",
"Allow Temporary Chat": "允许临时对话",
"Allow User Location": "允许获取您的位置",
"Allow Voice Interruption in Call": "允许通话中的打断语音",
"Already have an account?": "已经拥有账号了?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "top_p的替代方法,目标是在质量和多样性之间取得平衡。参数p表示一个token相对于最有可能的token所需的最低概率。比如,当p=0.05且最有可能的token概率为0.9时,概率低于0.045的logits会被排除。(默认值:0.0",
"Amazing": "",
"an assistant": "AI模型",
"and": "和",
"and {{COUNT}} more": "还有 {{COUNT}} 个",
@@ -69,7 +70,7 @@
"API keys": "API 密钥",
"Application DN": "Application DN",
"Application DN Password": "Application DN 密码",
"applies to all users with the \"user\" role": "",
"applies to all users with the \"user\" role": "用于所有具有“用户”角色的用户",
"April": "四月",
"Archive": "归档",
"Archive All Chats": "归档所有对话记录",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "需要 AUTOMATIC1111 基础地址。",
"Available list": "可用列表",
"available!": "版本可用!",
"Awful": "",
"Azure AI Speech": "Azure AI 语音",
"Azure Region": "Azure 区域",
"Back": "返回",
@@ -107,7 +109,7 @@
"Bing Search V7 Endpoint": "Bing 搜索 V7 Endpoint",
"Bing Search V7 Subscription Key": "Bing 搜索 V7 订阅密钥",
"Brave Search API Key": "Brave Search API 密钥",
"By {{name}}": "",
"By {{name}}": "由 {{name}} 提供",
"Bypass SSL verification for Websites": "绕过网站的 SSL 验证",
"Call": "呼叫",
"Call feature is not supported when using Web STT engine": "使用 Web 语音转文字引擎时不支持呼叫功能。",
@@ -124,7 +126,7 @@
"Chat Controls": "对话高级设置",
"Chat direction": "对话样式方向",
"Chat Overview": "对话概述",
"Chat Permissions": "",
"Chat Permissions": "对话权限",
"Chat Tags Auto-Generation": "自动生成对话标签",
"Chats": "对话",
"Check Again": "刷新重试",
@@ -155,7 +157,7 @@
"Code execution": "代码执行",
"Code formatted successfully": "代码格式化成功",
"Collection": "文件集",
"Color": "",
"Color": "颜色",
"ComfyUI": "ComfyUI",
"ComfyUI Base URL": "ComfyUI 基础地址",
"ComfyUI Base URL is required.": "ComfyUI 基础地址为必需填写。",
@@ -189,12 +191,12 @@
"Copy Link": "复制链接",
"Copy to clipboard": "复制到剪贴板",
"Copying to clipboard was successful!": "成功复制到剪贴板!",
"Create": "",
"Create": "创建",
"Create a knowledge base": "创建知识库",
"Create a model": "创建一个模型",
"Create Account": "创建账号",
"Create Admin Account": "创建管理员账号",
"Create Group": "",
"Create Group": "创建权限组",
"Create Knowledge": "创建知识",
"Create new key": "创建新密钥",
"Create new secret key": "创建新安全密钥",
@@ -213,8 +215,8 @@
"Default (SentenceTransformers)": "默认(SentenceTransformers",
"Default Model": "默认模型",
"Default model updated": "默认模型已更新",
"Default permissions": "",
"Default permissions updated successfully": "",
"Default permissions": "默认权限",
"Default permissions updated successfully": "默认权限更新成功",
"Default Prompt Suggestions": "默认提示词建议",
"Default to 389 or 636 if TLS is enabled": "如果启用 TLS,则默认为 389 或 636",
"Default to ALL": "默认为 ALL",
@@ -222,7 +224,7 @@
"Delete": "删除",
"Delete a model": "删除一个模型",
"Delete All Chats": "删除所有对话记录",
"Delete All Models": "",
"Delete All Models": "删除所有模型",
"Delete chat": "删除对话记录",
"Delete Chat": "删除对话记录",
"Delete chat?": "删除对话记录?",
@@ -234,6 +236,7 @@
"Delete User": "删除用户",
"Deleted {{deleteModelTag}}": "已删除 {{deleteModelTag}}",
"Deleted {{name}}": "已删除 {{name}}",
"Deleted User": "已删除用户",
"Describe your knowledge base and objectives": "描述您的知识库和目标",
"Description": "描述",
"Didn't fully follow instructions": "没有完全遵照指示",
@@ -248,10 +251,10 @@
"Discover, download, and explore custom tools": "发现、下载并探索更多工具",
"Discover, download, and explore model presets": "发现、下载并探索更多模型预设",
"Dismissible": "是否可关闭",
"Display": "",
"Display": "显示",
"Display Emoji in Call": "在通话中显示 Emoji 表情符号",
"Display the username instead of You in the Chat": "在对话中显示用户名而不是“你”",
"Displays citations in the response": "",
"Displays citations in the response": "在回复中显示引用",
"Dive into knowledge": "深入知识的海洋",
"Do not install functions from sources you do not fully trust.": "切勿安装来源不完全可信的函数。",
"Do not install tools from sources you do not fully trust.": "切勿安装来源不完全可信的工具。",
@@ -267,23 +270,23 @@
"Download": "下载",
"Download canceled": "下载已取消",
"Download Database": "下载数据库",
"Drag and drop a file to upload or select a file to view": "",
"Drag and drop a file to upload or select a file to view": "拖动文件上传或选择文件查看",
"Draw": "平局",
"Drop any files here to add to the conversation": "拖动文件到此处以添加到对话中",
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "例如 '30s','10m'。有效的时间单位是秒:'s',分:'m',时:'h'。",
"e.g. A filter to remove profanity from text": "例如:一个用于过滤文本中不当内容的过滤器",
"e.g. My Filter": "例如:我的过滤器",
"e.g. My Tools": "",
"e.g. My Tools": "例如:我的工具",
"e.g. my_filter": "例如:my_filter",
"e.g. my_tools": "",
"e.g. Tools for performing various operations": "",
"e.g. my_tools": "例如:my_tools",
"e.g. Tools for performing various operations": "例如:用于执行各种操作的工具",
"Edit": "编辑",
"Edit Arena Model": "编辑竞技场模型",
"Edit Connection": "编辑连接",
"Edit Default Permissions": "",
"Edit Default Permissions": "编辑默认权限",
"Edit Memory": "编辑记忆",
"Edit User": "编辑用户",
"Edit User Group": "",
"Edit User Group": "编辑用户组",
"ElevenLabs": "ElevenLabs",
"Email": "电子邮箱",
"Embark on adventures": "踏上冒险之旅",
@@ -291,14 +294,14 @@
"Embedding Model": "语义向量模型",
"Embedding Model Engine": "语义向量模型引擎",
"Embedding model set to \"{{embedding_model}}\"": "语义向量模型设置为 \"{{embedding_model}}\"",
"Enable API Key Auth": "",
"Enable API Key Auth": "启用 API 密钥鉴权",
"Enable Community Sharing": "启用分享至社区",
"Enable Memory Locking (mlock) to prevent model data from being swapped out of RAM. This option locks the model's working set of pages into RAM, ensuring that they will not be swapped out to disk. This can help maintain performance by avoiding page faults and ensuring fast data access.": "启用内存锁定(mlock)以防止模型数据被交换出RAM。此选项将模型的工作集页面锁定在RAM中,确保它们不会被交换到磁盘。这可以通过避免页面错误和确保快速数据访问来帮助维持性能。",
"Enable Memory Mapping (mmap) to load model data. This option allows the system to use disk storage as an extension of RAM by treating disk files as if they were in RAM. This can improve model performance by allowing for faster data access. However, it may not work correctly with all systems and can consume a significant amount of disk space.": "启用内存映射(mmap)以加载模型数据。此选项允许系统通过将磁盘文件视为在RAM中来使用磁盘存储作为RAM的扩展。这可以通过更快的数据访问来提高模型性能。然而,它可能无法在所有系统上正常工作,并且可能会消耗大量磁盘空间。",
"Enable Message Rating": "启用回复评价",
"Enable Mirostat sampling for controlling perplexity. (Default: 0, 0 = Disabled, 1 = Mirostat, 2 = Mirostat 2.0)": "启用 Mirostat 采样以控制困惑度。(默认值:0,0 = 禁用,1 = Mirostat2 = Mirostat 2.0",
"Enable New Sign Ups": "允许新用户注册",
"Enable Retrieval Query Generation": "",
"Enable Retrieval Query Generation": "启用检索查询生成",
"Enable Tags Generation": "启用自动生成标签",
"Enable Web Search": "启用联网搜索",
"Enable Web Search Query Generation": "启用生成联网搜索关键词",
@@ -326,6 +329,7 @@
"Enter language codes": "输入语言代码",
"Enter Model ID": "输入模型 ID",
"Enter model tag (e.g. {{modelTag}})": "输入模型标签 (例如:{{modelTag}})",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "输入步骤数 (Steps) (例如:50)",
"Enter Sampler (e.g. Euler a)": "输入 Sampler (例如:Euler a)",
"Enter Scheduler (e.g. Karras)": "输入 Scheduler (例如:Karras)",
@@ -371,7 +375,7 @@
"Export Config to JSON File": "导出配置信息至 JSON 文件中",
"Export Functions": "导出函数",
"Export Models": "导出模型",
"Export Presets": "",
"Export Presets": "导出预设",
"Export Prompts": "导出提示词",
"Export to CSV": "导出到 CSV",
"Export Tools": "导出工具",
@@ -383,7 +387,7 @@
"Failed to upload file.": "上传文件失败",
"February": "二月",
"Feedback History": "反馈历史",
"Feedbacks": "",
"Feedbacks": "反馈",
"Feel free to add specific details": "欢迎补充具体细节",
"File": "文件",
"File added successfully.": "文件成功添加",
@@ -432,23 +436,24 @@
"Good Response": "点赞此回答",
"Google PSE API Key": "Google PSE API 密钥",
"Google PSE Engine Id": "Google PSE 引擎 ID",
"Group created successfully": "",
"Group deleted successfully": "",
"Group Description": "",
"Group Name": "",
"Group updated successfully": "",
"Groups": "",
"Group created successfully": "权限组创建成功",
"Group deleted successfully": "权限组删除成功",
"Group Description": "权限组描述",
"Group Name": "权限组名称",
"Group updated successfully": "权限组更新成功",
"Groups": "权限组",
"h:mm a": "HH:mm",
"Haptic Feedback": "震动反馈",
"has no conversations.": "没有对话。",
"Hello, {{name}}": "您好,{{name}}",
"Help": "帮助",
"Help us create the best community leaderboard by sharing your feedback history!": "分享您的反馈历史记录,共建最佳模型社区排行榜!",
"Hex Color": "",
"Hex Color - Leave empty for default color": "",
"Hex Color": "十六进制颜色代码",
"Hex Color - Leave empty for default color": "十六进制颜色代码 - 留空使用默认颜色",
"Hide": "隐藏",
"Host": "Host",
"How can I help you today?": "有什么我能帮您的吗?",
"How would you rate this response?": "",
"Hybrid Search": "混合搜索",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "我已阅读并理解我的行为所带来的影响,明白执行任意代码所涉及的风险。且我已验证代码来源可信度。",
"ID": "ID",
@@ -461,7 +466,7 @@
"Import Config from JSON File": "导入 JSON 文件中的配置信息",
"Import Functions": "导入函数",
"Import Models": "导入模型",
"Import Presets": "",
"Import Presets": "导入预设",
"Import Prompts": "导入提示词",
"Import Tools": "导入工具",
"Include": "包括",
@@ -488,7 +493,7 @@
"Key": "密匙",
"Keyboard shortcuts": "键盘快捷键",
"Knowledge": "知识库",
"Knowledge Access": "",
"Knowledge Access": "访问知识库",
"Knowledge created successfully.": "知识成功创建",
"Knowledge deleted successfully.": "知识成功删除",
"Knowledge reset successfully.": "知识成功重置",
@@ -502,8 +507,8 @@
"LDAP server updated": "LDAP 服务器已更新",
"Leaderboard": "排行榜",
"Leave empty for unlimited": "留空表示无限制",
"Leave empty to include all models from \"{{URL}}/api/tags\" endpoint": "",
"Leave empty to include all models from \"{{URL}}/models\" endpoint": "",
"Leave empty to include all models from \"{{URL}}/api/tags\" endpoint": "留空表示包含所有来自 \"{{URL}}/api/tags\" 的模型",
"Leave empty to include all models from \"{{URL}}/models\" endpoint": "留空表示包含所有来自 \"{{URL}}/models\" 的模型",
"Leave empty to include all models or select specific models": "留空表示包含所有模型或请选择模型",
"Leave empty to use the default prompt, or enter a custom prompt": "留空以使用默认提示词,或输入自定义提示词。",
"Light": "浅色",
@@ -518,7 +523,7 @@
"Make sure to export a workflow.json file as API format from ComfyUI.": "确保从 ComfyUI 导出 API 格式的 workflow.json 文件。",
"Manage": "管理",
"Manage Arena Models": "管理竞技场模型",
"Manage Ollama": "",
"Manage Ollama": "管理 Ollama",
"Manage Ollama API Connections": "管理Ollama API连接",
"Manage OpenAI API Connections": "管理OpenAI API连接",
"Manage Pipelines": "管理 Pipeline",
@@ -554,17 +559,18 @@
"Model accepts image inputs": "模型接受图像输入",
"Model created successfully!": "模型创建成功!",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "检测到模型文件系统路径,无法继续进行。更新操作需要提供模型简称。",
"Model Filtering": "",
"Model Filtering": "模型白名单",
"Model ID": "模型 ID",
"Model IDs": "模型 ID",
"Model Name": "模型名称",
"Model not selected": "未选择模型",
"Model Params": "模型参数",
"Model Permissions": "",
"Model Permissions": "模型权限",
"Model updated successfully": "模型更新成功",
"Modelfile Content": "模型文件内容",
"Models": "模型",
"Models Access": "",
"Models Access": "访问模型列表",
"Mojeek Search API Key": "",
"more": "更多",
"More": "更多",
"Name": "名称",
@@ -578,15 +584,15 @@
"No feedbacks found": "暂无任何反馈",
"No file selected": "未选中文件",
"No files found.": "未找到文件。",
"No groups with access, add a group to grant access": "",
"No groups with access, add a group to grant access": "没有权限组,请添加一个权限组以授予访问权限",
"No HTML, CSS, or JavaScript content found.": "未找到 HTML、CSS 或 JavaScript 内容。",
"No knowledge found": "未找到知识",
"No model IDs": "",
"No model IDs": "没有模型 ID",
"No models found": "未找到任何模型",
"No results found": "未找到结果",
"No search query generated": "未生成搜索查询",
"No source available": "没有可用来源",
"No users were found.": "",
"No users were found.": "未找到用户",
"No valves to update": "没有需要更新的值",
"None": "无",
"Not factually correct": "事实并非如此",
@@ -611,7 +617,7 @@
"Only alphanumeric characters and hyphens are allowed": "只允许使用英文字母,数字 (0-9) 以及连字符 (-)",
"Only alphanumeric characters and hyphens are allowed in the command string.": "命令字符串中只允许使用英文字母,数字 (0-9) 以及连字符 (-)。",
"Only collections can be edited, create a new knowledge base to edit/add documents.": "只能编辑文件集,创建一个新的知识库来编辑/添加文件。",
"Only select users and groups with permission can access": "",
"Only select users and groups with permission can access": "只有具有权限的用户和组才能访问",
"Oops! Looks like the URL is invalid. Please double-check and try again.": "此链接似乎为无效链接。请检查后重试。",
"Oops! There are files still uploading. Please wait for the upload to complete.": "稍等!还有文件正在上传。请等待上传完成。",
"Oops! There was an error in the previous response.": "糟糕!有一个错误出现在了之前的回复中。",
@@ -629,21 +635,21 @@
"OpenAI API settings updated": "OpenAI API 设置已更新",
"OpenAI URL/Key required.": "需要 OpenAI URL/Key",
"or": "或",
"Organize your users": "",
"Organize your users": "组织用户",
"Other": "其他",
"OUTPUT": "输出",
"Output format": "输出格式",
"Overview": "概述",
"page": "页",
"Password": "密码",
"Paste Large Text as File": "",
"Paste Large Text as File": "粘贴大文本为文件",
"PDF document (.pdf)": "PDF 文档 (.pdf)",
"PDF Extract Images (OCR)": "PDF 图像处理 (使用 OCR)",
"pending": "待激活",
"Permission denied when accessing media devices": "申请媒体设备权限被拒绝",
"Permission denied when accessing microphone": "申请麦克风权限被拒绝",
"Permission denied when accessing microphone: {{error}}": "申请麦克风权限被拒绝:{{error}}",
"Permissions": "",
"Permissions": "权限",
"Personalization": "个性化",
"Pin": "置顶",
"Pinned": "已置顶",
@@ -668,14 +674,14 @@
"Profile Image": "用户头像",
"Prompt (e.g. Tell me a fun fact about the Roman Empire)": "提示(例如:给我讲一个关于罗马帝国的趣事。)",
"Prompt Content": "提示词内容",
"Prompt created successfully": "",
"Prompt created successfully": "提示词创建成功",
"Prompt suggestions": "提示词建议",
"Prompt updated successfully": "",
"Prompt updated successfully": "提示词更新成功",
"Prompts": "提示词",
"Prompts Access": "",
"Prompts Access": "访问提示词",
"Pull \"{{searchValue}}\" from Ollama.com": "从 Ollama.com 拉取 \"{{searchValue}}\"",
"Pull a model from Ollama.com": "从 Ollama.com 拉取一个模型",
"Query Generation Prompt": "",
"Query Generation Prompt": "查询生成提示词",
"Query Params": "查询参数",
"RAG Template": "RAG 提示词模板",
"Rating": "评价",
@@ -747,7 +753,7 @@
"Select a base model": "选择一个基础模型",
"Select a engine": "选择一个搜索引擎",
"Select a function": "选择一个函数",
"Select a group": "",
"Select a group": "选择一个权限组",
"Select a model": "选择一个模型",
"Select a pipeline": "选择一个管道",
"Select a pipeline url": "选择一个管道 URL",
@@ -770,7 +776,7 @@
"Set as default": "设为默认",
"Set CFG Scale": "设置 CFG Scale",
"Set Default Model": "设置默认模型",
"Set embedding model": "",
"Set embedding model": "设置语义向量模型",
"Set embedding model (e.g. {{model}})": "设置语义向量模型 (例如:{{model}})",
"Set Image Size": "设置图片分辨率",
"Set reranking model (e.g. {{model}})": "设置重排模型 (例如:{{model}})",
@@ -858,8 +864,8 @@
"This response was generated by \"{{model}}\"": "此回复由 \"{{model}}\" 生成",
"This will delete": "这将删除",
"This will delete <strong>{{NAME}}</strong> and <strong>all its contents</strong>.": "这将删除<strong>{{NAME}}</strong>及其<strong>所有内容</strong>。",
"This will delete all models including custom models": "",
"This will delete all models including custom models and cannot be undone.": "",
"This will delete all models including custom models": "这将删除所有模型,包括自定义模型",
"This will delete all models including custom models and cannot be undone.": "这将删除所有模型,包括自定义模型,且无法撤销。",
"This will reset the knowledge base and sync all files. Do you wish to continue?": "这将重置知识库并替换所有文件为目录下文件。确认继续?",
"Thorough explanation": "解释较为详细",
"Tika": "Tika",
@@ -889,13 +895,13 @@
"Too verbose": "过于冗长",
"Tool created successfully": "工具创建成功",
"Tool deleted successfully": "工具删除成功",
"Tool Description": "",
"Tool ID": "",
"Tool Description": "工具描述",
"Tool ID": "工具 ID",
"Tool imported successfully": "工具导入成功",
"Tool Name": "",
"Tool Name": "工具名称",
"Tool updated successfully": "工具更新成功",
"Tools": "工具",
"Tools Access": "",
"Tools Access": "访问工具",
"Tools are a function calling system with arbitrary code execution": "工具是一个具有任意代码执行能力的函数调用系统",
"Tools have a function calling system that allows arbitrary code execution": "注意:工具有权执行任意代码",
"Tools have a function calling system that allows arbitrary code execution.": "注意:工具有权执行任意代码。",
@@ -935,7 +941,7 @@
"URL Mode": "URL 模式",
"Use '#' in the prompt input to load and include your knowledge.": "在输入框中输入'#'号来加载你需要的知识库内容。",
"Use Gravatar": "使用来自 Gravatar 的头像",
"Use groups to group your users and assign permissions.": "",
"Use groups to group your users and assign permissions.": "使用权限组来组织用户并分配权限。",
"Use Initials": "使用首个字符作为头像",
"use_mlock (Ollama)": "use_mlockOllama",
"use_mmap (Ollama)": "use_mmap Ollama",
@@ -954,12 +960,12 @@
"variable to have them replaced with clipboard content.": "变量将被剪贴板内容替换。",
"Version": "版本",
"Version {{selectedVersion}} of {{totalVersions}}": "版本 {{selectedVersion}}/{{totalVersions}}",
"Visibility": "",
"Visibility": "可见性",
"Voice": "语音",
"Voice Input": "语音输入",
"Warning": "警告",
"Warning:": "警告:",
"Warning: Enabling this will allow users to upload arbitrary code on the server.": "",
"Warning: Enabling this will allow users to upload arbitrary code on the server.": "警告:启用此功能将允许用户在服务器上上传任意代码。",
"Warning: If you update or change your embedding model, you will need to re-import all documents.": "警告:如果您修改了语义向量模型,则需要重新导入所有文档。",
"Web": "网页",
"Web API": "网页 API",
@@ -968,19 +974,20 @@
"Web Search Engine": "联网搜索引擎",
"Webhook URL": "Webhook URL",
"WebUI Settings": "WebUI 设置",
"WebUI will make requests to \"{{url}}/api/chat\"": "",
"WebUI will make requests to \"{{url}}/chat/completions\"": "",
"WebUI will make requests to \"{{url}}/api/chat\"": "WebUI 将向 \"{{url}}/api/chat\" 发出请求",
"WebUI will make requests to \"{{url}}/chat/completions\"": "WebUI 将向 \"{{url}}/chat/completions\" 发出请求",
"What are you trying to achieve?": "你想要达到什么目标?",
"What are you working on?": "你在忙于什么?",
"Whats New in": "最近更新内容于",
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "启用后,模型将实时回复每条聊天信息,在用户发送信息后立即生成回复。这种模式对即时聊天应用非常有用,但可能会影响较慢硬件的性能。",
"wherever you are": "无论你在哪里",
"Whisper (Local)": "Whisper (本地)",
"Why?": "",
"Widescreen Mode": "宽屏模式",
"Won": "获胜",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "与 top-k 一起工作。较高的值(例如0.95)将导致更具多样性的文本,而较低的值(例如0.5)将生成更集中和保守的文本。(默认值:0.9)",
"Workspace": "工作空间",
"Workspace Permissions": "",
"Workspace Permissions": "工作空间权限",
"Write a prompt suggestion (e.g. Who are you?)": "写一个提示词建议(例如:你是谁?)",
"Write a summary in 50 words that summarizes [topic or keyword].": "用 50 个字写一个总结 [主题或关键词]。",
"Write something...": "单击以键入内容...",
@@ -990,7 +997,7 @@
"You can only chat with a maximum of {{maxCount}} file(s) at a time.": "每次对话最多仅能附上 {{maxCount}} 个文件。",
"You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "通过点击下方的“管理”按钮,你可以添加记忆,以个性化大语言模型的互动,使其更有用,更符合你的需求。",
"You cannot upload an empty file.": "请勿上传空文件。",
"You do not have permission to upload files.": "",
"You do not have permission to upload files.": "你没有上传文件的权限。",
"You have no archived conversations.": "没有已归档的对话。",
"You have shared this chat": "此对话已经分享过",
"You're a helpful assistant.": "你是一个有帮助的助手。",
@@ -59,6 +59,7 @@
"Allow Voice Interruption in Call": "允許在通話中打斷語音",
"Already have an account?": "已經有帳號了嗎?",
"Alternative to the top_p, and aims to ensure a balance of quality and variety. The parameter p represents the minimum probability for a token to be considered, relative to the probability of the most likely token. For example, with p=0.05 and the most likely token having a probability of 0.9, logits with a value less than 0.045 are filtered out. (Default: 0.0)": "",
"Amazing": "",
"an assistant": "一位助手",
"and": "和",
"and {{COUNT}} more": "",
@@ -95,6 +96,7 @@
"AUTOMATIC1111 Base URL is required.": "需要 AUTOMATIC1111 基礎 URL。",
"Available list": "可用清單",
"available!": "可用!",
"Awful": "",
"Azure AI Speech": "Azure AI 語音",
"Azure Region": "Azure 區域",
"Back": "返回",
@@ -234,6 +236,7 @@
"Delete User": "刪除使用者",
"Deleted {{deleteModelTag}}": "已刪除 {{deleteModelTag}}",
"Deleted {{name}}": "已刪除 {{name}}",
"Deleted User": "",
"Describe your knowledge base and objectives": "",
"Description": "描述",
"Didn't fully follow instructions": "未完全遵循指示",
@@ -326,6 +329,7 @@
"Enter language codes": "輸入語言代碼",
"Enter Model ID": "輸入模型 ID",
"Enter model tag (e.g. {{modelTag}})": "輸入模型標籤(例如:{{modelTag}}",
"Enter Mojeek Search API Key": "",
"Enter Number of Steps (e.g. 50)": "輸入步驟數(例如:50",
"Enter Sampler (e.g. Euler a)": "輸入取樣器(例如:Euler a",
"Enter Scheduler (e.g. Karras)": "輸入排程器(例如:Karras",
@@ -449,6 +453,7 @@
"Hide": "隱藏",
"Host": "",
"How can I help you today?": "今天我能為您做些什麼?",
"How would you rate this response?": "",
"Hybrid Search": "混合搜尋",
"I acknowledge that I have read and I understand the implications of my action. I am aware of the risks associated with executing arbitrary code and I have verified the trustworthiness of the source.": "我確認已閱讀並理解我的操作所帶來的影響。我了解執行任意程式碼的相關風險,並已驗證來源的可信度。",
"ID": "",
@@ -565,6 +570,7 @@
"Modelfile Content": "模型檔案內容",
"Models": "模型",
"Models Access": "",
"Mojeek Search API Key": "",
"more": "",
"More": "更多",
"Name": "名稱",
@@ -977,6 +983,7 @@
"When enabled, the model will respond to each chat message in real-time, generating a response as soon as the user sends a message. This mode is useful for live chat applications, but may impact performance on slower hardware.": "",
"wherever you are": "",
"Whisper (Local)": "Whisper(本機)",
"Why?": "",
"Widescreen Mode": "寬螢幕模式",
"Won": "",
"Works together with top-k. A higher value (e.g., 0.95) will lead to more diverse text, while a lower value (e.g., 0.5) will generate more focused and conservative text. (Default: 0.9)": "",
+12 -1
View File
@@ -8,7 +8,7 @@ import { TTS_RESPONSE_SPLIT } from '$lib/types';
// Helper functions
//////////////////////////
export const replaceTokens = (content, char, user) => {
export const replaceTokens = (content, sourceIds, char, user) => {
const charToken = /{{char}}/gi;
const userToken = /{{user}}/gi;
const videoIdToken = /{{VIDEO_FILE_ID_([a-f0-9-]+)}}/gi; // Regex to capture the video ID
@@ -36,6 +36,17 @@ export const replaceTokens = (content, char, user) => {
return `<iframe src="${htmlUrl}" width="100%" frameborder="0" onload="this.style.height=(this.contentWindow.document.body.scrollHeight+20)+'px';"></iframe>`;
});
// Remove sourceIds from the content and replace them with <source_id>...</source_id>
if (Array.isArray(sourceIds)) {
sourceIds.forEach((sourceId) => {
// Create a token based on the exact `[sourceId]` string
const sourceToken = `\\[${sourceId}\\]`; // Escape special characters for RegExp
const sourceRegex = new RegExp(sourceToken, 'g'); // Match all occurrences of [sourceId]
content = content.replace(sourceRegex, `<source_id data="${sourceId}" />`);
});
}
return content;
};

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