mirror of
https://github.com/open-webui/open-webui.git
synced 2026-01-03 23:25:21 +00:00
Merge branch 'open-webui:main' into searxng
This commit is contained in:
commit
75e51ecf6d
69 changed files with 1120 additions and 222 deletions
56
.github/workflows/docker-build.yaml
vendored
56
.github/workflows/docker-build.yaml
vendored
|
|
@ -11,8 +11,6 @@ on:
|
|||
|
||||
env:
|
||||
REGISTRY: ghcr.io
|
||||
IMAGE_NAME: ${{ github.repository }}
|
||||
FULL_IMAGE_NAME: ghcr.io/${{ github.repository }}
|
||||
|
||||
jobs:
|
||||
build-main-image:
|
||||
|
|
@ -28,6 +26,15 @@ jobs:
|
|||
- linux/arm64
|
||||
|
||||
steps:
|
||||
# GitHub Packages requires the entire repository name to be in lowercase
|
||||
# although the repository owner has a lowercase username, this prevents some people from running actions after forking
|
||||
- name: Set repository and image name to lowercase
|
||||
run: |
|
||||
echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV}
|
||||
echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV}
|
||||
env:
|
||||
IMAGE_NAME: '${{ github.repository }}'
|
||||
|
||||
- name: Prepare
|
||||
run: |
|
||||
platform=${{ matrix.platform }}
|
||||
|
|
@ -116,6 +123,15 @@ jobs:
|
|||
- linux/arm64
|
||||
|
||||
steps:
|
||||
# GitHub Packages requires the entire repository name to be in lowercase
|
||||
# although the repository owner has a lowercase username, this prevents some people from running actions after forking
|
||||
- name: Set repository and image name to lowercase
|
||||
run: |
|
||||
echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV}
|
||||
echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV}
|
||||
env:
|
||||
IMAGE_NAME: '${{ github.repository }}'
|
||||
|
||||
- name: Prepare
|
||||
run: |
|
||||
platform=${{ matrix.platform }}
|
||||
|
|
@ -207,6 +223,15 @@ jobs:
|
|||
- linux/arm64
|
||||
|
||||
steps:
|
||||
# GitHub Packages requires the entire repository name to be in lowercase
|
||||
# although the repository owner has a lowercase username, this prevents some people from running actions after forking
|
||||
- name: Set repository and image name to lowercase
|
||||
run: |
|
||||
echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV}
|
||||
echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV}
|
||||
env:
|
||||
IMAGE_NAME: '${{ github.repository }}'
|
||||
|
||||
- name: Prepare
|
||||
run: |
|
||||
platform=${{ matrix.platform }}
|
||||
|
|
@ -289,6 +314,15 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
needs: [ build-main-image ]
|
||||
steps:
|
||||
# GitHub Packages requires the entire repository name to be in lowercase
|
||||
# although the repository owner has a lowercase username, this prevents some people from running actions after forking
|
||||
- name: Set repository and image name to lowercase
|
||||
run: |
|
||||
echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV}
|
||||
echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV}
|
||||
env:
|
||||
IMAGE_NAME: '${{ github.repository }}'
|
||||
|
||||
- name: Download digests
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
|
|
@ -335,6 +369,15 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
needs: [ build-cuda-image ]
|
||||
steps:
|
||||
# GitHub Packages requires the entire repository name to be in lowercase
|
||||
# although the repository owner has a lowercase username, this prevents some people from running actions after forking
|
||||
- name: Set repository and image name to lowercase
|
||||
run: |
|
||||
echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV}
|
||||
echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV}
|
||||
env:
|
||||
IMAGE_NAME: '${{ github.repository }}'
|
||||
|
||||
- name: Download digests
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
|
|
@ -382,6 +425,15 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
needs: [ build-ollama-image ]
|
||||
steps:
|
||||
# GitHub Packages requires the entire repository name to be in lowercase
|
||||
# although the repository owner has a lowercase username, this prevents some people from running actions after forking
|
||||
- name: Set repository and image name to lowercase
|
||||
run: |
|
||||
echo "IMAGE_NAME=${IMAGE_NAME,,}" >>${GITHUB_ENV}
|
||||
echo "FULL_IMAGE_NAME=ghcr.io/${IMAGE_NAME,,}" >>${GITHUB_ENV}
|
||||
env:
|
||||
IMAGE_NAME: '${{ github.repository }}'
|
||||
|
||||
- name: Download digests
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
|
|
|
|||
24
CHANGELOG.md
24
CHANGELOG.md
|
|
@ -5,6 +5,30 @@ 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.3.5] - 2024-06-16
|
||||
|
||||
### Added
|
||||
|
||||
- **📞 Enhanced Voice Call**: Text-to-speech (TTS) callback now operates in real-time for each sentence, reducing latency by not waiting for full completion.
|
||||
- **👆 Tap to Interrupt**: During a call, you can now stop the assistant from speaking by simply tapping, instead of using voice. This resolves the issue of the speaker's voice being mistakenly registered as input.
|
||||
- **😊 Emoji Call**: Toggle this feature on from the Settings > Interface, allowing LLMs to express emotions using emojis during voice calls for a more dynamic interaction.
|
||||
- **🖱️ Quick Archive/Delete**: Use the Shift key + mouseover on the chat list to swiftly archive or delete items.
|
||||
- **📝 Markdown Support in Model Descriptions**: You can now format model descriptions with markdown, enabling bold text, links, etc.
|
||||
- **🧠 Editable Memories**: Adds the capability to modify memories.
|
||||
- **📋 Admin Panel Sorting**: Introduces the ability to sort users/chats within the admin panel.
|
||||
- **🌑 Dark Mode for Quick Selectors**: Dark mode now available for chat quick selectors (prompts, models, documents).
|
||||
- **🔧 Advanced Parameters**: Adds 'num_keep' and 'num_batch' to advanced parameters for customization.
|
||||
- **📅 Dynamic System Prompts**: New variables '{{CURRENT_DATETIME}}', '{{CURRENT_TIME}}', '{{USER_LOCATION}}' added for system prompts. Ensure '{{USER_LOCATION}}' is toggled on from Settings > Interface.
|
||||
- **🌐 Tavily Web Search**: Includes Tavily as a web search provider option.
|
||||
- **🖊️ Federated Auth Usernames**: Ability to set user names for federated authentication.
|
||||
- **🔗 Auto Clean URLs**: When adding connection URLs, trailing slashes are now automatically removed.
|
||||
- **🌐 Enhanced Translations**: Improved Chinese and Swedish translations.
|
||||
|
||||
### Fixed
|
||||
|
||||
- **⏳ AIOHTTP_CLIENT_TIMEOUT**: Introduced a new environment variable 'AIOHTTP_CLIENT_TIMEOUT' for requests to Ollama lasting longer than 5 minutes. Default is 300 seconds; set to blank ('') for no timeout.
|
||||
- **❌ Message Delete Freeze**: Resolved an issue where message deletion would sometimes cause the web UI to freeze.
|
||||
|
||||
## [0.3.4] - 2024-06-12
|
||||
|
||||
### Fixed
|
||||
|
|
|
|||
|
|
@ -160,7 +160,7 @@ Check our Migration Guide available in our [Open WebUI Documentation](https://do
|
|||
If you want to try out the latest bleeding-edge features and are okay with occasional instability, you can use the `:dev` tag like this:
|
||||
|
||||
```bash
|
||||
docker run -d -p 3000:8080 -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:dev
|
||||
docker run -d -p 3000:8080 -v open-webui:/app/backend/data --name open-webui --add-host=host.docker.internal:host-gateway --restart always ghcr.io/open-webui/open-webui:dev
|
||||
```
|
||||
|
||||
## What's Next? 🌟
|
||||
|
|
|
|||
|
|
@ -37,6 +37,10 @@ from config import (
|
|||
ENABLE_IMAGE_GENERATION,
|
||||
AUTOMATIC1111_BASE_URL,
|
||||
COMFYUI_BASE_URL,
|
||||
COMFYUI_CFG_SCALE,
|
||||
COMFYUI_SAMPLER,
|
||||
COMFYUI_SCHEDULER,
|
||||
COMFYUI_SD3,
|
||||
IMAGES_OPENAI_API_BASE_URL,
|
||||
IMAGES_OPENAI_API_KEY,
|
||||
IMAGE_GENERATION_MODEL,
|
||||
|
|
@ -78,6 +82,10 @@ app.state.config.COMFYUI_BASE_URL = COMFYUI_BASE_URL
|
|||
|
||||
app.state.config.IMAGE_SIZE = IMAGE_SIZE
|
||||
app.state.config.IMAGE_STEPS = IMAGE_STEPS
|
||||
app.state.config.COMFYUI_CFG_SCALE = COMFYUI_CFG_SCALE
|
||||
app.state.config.COMFYUI_SAMPLER = COMFYUI_SAMPLER
|
||||
app.state.config.COMFYUI_SCHEDULER = COMFYUI_SCHEDULER
|
||||
app.state.config.COMFYUI_SD3 = COMFYUI_SD3
|
||||
|
||||
|
||||
@app.get("/config")
|
||||
|
|
@ -457,6 +465,18 @@ def generate_image(
|
|||
if form_data.negative_prompt is not None:
|
||||
data["negative_prompt"] = form_data.negative_prompt
|
||||
|
||||
if app.state.config.COMFYUI_CFG_SCALE:
|
||||
data["cfg_scale"] = app.state.config.COMFYUI_CFG_SCALE
|
||||
|
||||
if app.state.config.COMFYUI_SAMPLER is not None:
|
||||
data["sampler"] = app.state.config.COMFYUI_SAMPLER
|
||||
|
||||
if app.state.config.COMFYUI_SCHEDULER is not None:
|
||||
data["scheduler"] = app.state.config.COMFYUI_SCHEDULER
|
||||
|
||||
if app.state.config.COMFYUI_SD3 is not None:
|
||||
data["sd3"] = app.state.config.COMFYUI_SD3
|
||||
|
||||
data = ImageGenerationPayload(**data)
|
||||
|
||||
res = comfyui_generate_image(
|
||||
|
|
|
|||
|
|
@ -190,6 +190,10 @@ class ImageGenerationPayload(BaseModel):
|
|||
width: int
|
||||
height: int
|
||||
n: int = 1
|
||||
cfg_scale: Optional[float] = None
|
||||
sampler: Optional[str] = None
|
||||
scheduler: Optional[str] = None
|
||||
sd3: Optional[bool] = None
|
||||
|
||||
|
||||
def comfyui_generate_image(
|
||||
|
|
@ -199,6 +203,18 @@ def comfyui_generate_image(
|
|||
|
||||
comfyui_prompt = json.loads(COMFYUI_DEFAULT_PROMPT)
|
||||
|
||||
if payload.cfg_scale:
|
||||
comfyui_prompt["3"]["inputs"]["cfg"] = payload.cfg_scale
|
||||
|
||||
if payload.sampler:
|
||||
comfyui_prompt["3"]["inputs"]["sampler"] = payload.sampler
|
||||
|
||||
if payload.scheduler:
|
||||
comfyui_prompt["3"]["inputs"]["scheduler"] = payload.scheduler
|
||||
|
||||
if payload.sd3:
|
||||
comfyui_prompt["5"]["class_type"] = "EmptySD3LatentImage"
|
||||
|
||||
comfyui_prompt["4"]["inputs"]["ckpt_name"] = model
|
||||
comfyui_prompt["5"]["inputs"]["batch_size"] = payload.n
|
||||
comfyui_prompt["5"]["inputs"]["width"] = payload.width
|
||||
|
|
|
|||
|
|
@ -850,8 +850,7 @@ async def generate_chat_completion(
|
|||
|
||||
url = app.state.config.OLLAMA_BASE_URLS[url_idx]
|
||||
log.info(f"url: {url}")
|
||||
|
||||
print(payload)
|
||||
log.debug(payload)
|
||||
|
||||
return await post_streaming_url(f"{url}/api/chat", json.dumps(payload))
|
||||
|
||||
|
|
|
|||
|
|
@ -430,13 +430,11 @@ async def generate_chat_completion(
|
|||
# Convert the modified body back to JSON
|
||||
payload = json.dumps(payload)
|
||||
|
||||
print(payload)
|
||||
log.debug(payload)
|
||||
|
||||
url = app.state.config.OPENAI_API_BASE_URLS[idx]
|
||||
key = app.state.config.OPENAI_API_KEYS[idx]
|
||||
|
||||
print(payload)
|
||||
|
||||
headers = {}
|
||||
headers["Authorization"] = f"Bearer {key}"
|
||||
headers["Content-Type"] = "application/json"
|
||||
|
|
|
|||
48
backend/apps/webui/internal/migrations/013_add_user_info.py
Normal file
48
backend/apps/webui/internal/migrations/013_add_user_info.py
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
"""Peewee migrations -- 002_add_local_sharing.py.
|
||||
|
||||
Some examples (model - class or model name)::
|
||||
|
||||
> Model = migrator.orm['table_name'] # Return model in current state by name
|
||||
> Model = migrator.ModelClass # Return model in current state by name
|
||||
|
||||
> migrator.sql(sql) # Run custom SQL
|
||||
> migrator.run(func, *args, **kwargs) # Run python function with the given args
|
||||
> migrator.create_model(Model) # Create a model (could be used as decorator)
|
||||
> migrator.remove_model(model, cascade=True) # Remove a model
|
||||
> migrator.add_fields(model, **fields) # Add fields to a model
|
||||
> migrator.change_fields(model, **fields) # Change fields
|
||||
> migrator.remove_fields(model, *field_names, cascade=True)
|
||||
> migrator.rename_field(model, old_field_name, new_field_name)
|
||||
> migrator.rename_table(model, new_table_name)
|
||||
> migrator.add_index(model, *col_names, unique=False)
|
||||
> migrator.add_not_null(model, *field_names)
|
||||
> migrator.add_default(model, field_name, default)
|
||||
> migrator.add_constraint(model, name, sql)
|
||||
> migrator.drop_index(model, *col_names)
|
||||
> migrator.drop_not_null(model, *field_names)
|
||||
> migrator.drop_constraints(model, *constraints)
|
||||
|
||||
"""
|
||||
|
||||
from contextlib import suppress
|
||||
|
||||
import peewee as pw
|
||||
from peewee_migrate import Migrator
|
||||
|
||||
|
||||
with suppress(ImportError):
|
||||
import playhouse.postgres_ext as pw_pext
|
||||
|
||||
|
||||
def migrate(migrator: Migrator, database: pw.Database, *, fake=False):
|
||||
"""Write your migrations here."""
|
||||
|
||||
# Adding fields info to the 'user' table
|
||||
migrator.add_fields("user", info=pw.TextField(null=True))
|
||||
|
||||
|
||||
def rollback(migrator: Migrator, database: pw.Database, *, fake=False):
|
||||
"""Write your rollback migrations here."""
|
||||
|
||||
# Remove the settings field
|
||||
migrator.remove_fields("user", "info")
|
||||
|
|
@ -25,6 +25,7 @@ from config import (
|
|||
USER_PERMISSIONS,
|
||||
WEBHOOK_URL,
|
||||
WEBUI_AUTH_TRUSTED_EMAIL_HEADER,
|
||||
WEBUI_AUTH_TRUSTED_NAME_HEADER,
|
||||
JWT_EXPIRES_IN,
|
||||
WEBUI_BANNERS,
|
||||
ENABLE_COMMUNITY_SHARING,
|
||||
|
|
@ -40,6 +41,7 @@ app.state.config = AppConfig()
|
|||
app.state.config.ENABLE_SIGNUP = ENABLE_SIGNUP
|
||||
app.state.config.JWT_EXPIRES_IN = JWT_EXPIRES_IN
|
||||
app.state.AUTH_TRUSTED_EMAIL_HEADER = WEBUI_AUTH_TRUSTED_EMAIL_HEADER
|
||||
app.state.AUTH_TRUSTED_NAME_HEADER = WEBUI_AUTH_TRUSTED_NAME_HEADER
|
||||
|
||||
|
||||
app.state.config.SHOW_ADMIN_DETAILS = SHOW_ADMIN_DETAILS
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ class User(Model):
|
|||
|
||||
api_key = CharField(null=True, unique=True)
|
||||
settings = JSONField(null=True)
|
||||
info = JSONField(null=True)
|
||||
|
||||
class Meta:
|
||||
database = DB
|
||||
|
|
@ -50,6 +51,7 @@ class UserModel(BaseModel):
|
|||
|
||||
api_key: Optional[str] = None
|
||||
settings: Optional[UserSettings] = None
|
||||
info: Optional[dict] = None
|
||||
|
||||
|
||||
####################
|
||||
|
|
|
|||
|
|
@ -33,7 +33,11 @@ from utils.utils import (
|
|||
from utils.misc import parse_duration, validate_email_format
|
||||
from utils.webhook import post_webhook
|
||||
from constants import ERROR_MESSAGES, WEBHOOK_MESSAGES
|
||||
from config import WEBUI_AUTH, WEBUI_AUTH_TRUSTED_EMAIL_HEADER
|
||||
from config import (
|
||||
WEBUI_AUTH,
|
||||
WEBUI_AUTH_TRUSTED_EMAIL_HEADER,
|
||||
WEBUI_AUTH_TRUSTED_NAME_HEADER,
|
||||
)
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
|
@ -110,11 +114,16 @@ async def signin(request: Request, form_data: SigninForm):
|
|||
raise HTTPException(400, detail=ERROR_MESSAGES.INVALID_TRUSTED_HEADER)
|
||||
|
||||
trusted_email = request.headers[WEBUI_AUTH_TRUSTED_EMAIL_HEADER].lower()
|
||||
trusted_name = trusted_email
|
||||
if WEBUI_AUTH_TRUSTED_NAME_HEADER:
|
||||
trusted_name = request.headers.get(
|
||||
WEBUI_AUTH_TRUSTED_NAME_HEADER, trusted_email
|
||||
)
|
||||
if not Users.get_user_by_email(trusted_email.lower()):
|
||||
await signup(
|
||||
request,
|
||||
SignupForm(
|
||||
email=trusted_email, password=str(uuid.uuid4()), name=trusted_email
|
||||
email=trusted_email, password=str(uuid.uuid4()), name=trusted_name
|
||||
),
|
||||
)
|
||||
user = Auths.authenticate_user_by_trusted_header(trusted_email)
|
||||
|
|
|
|||
|
|
@ -115,6 +115,52 @@ async def update_user_settings_by_session_user(
|
|||
)
|
||||
|
||||
|
||||
############################
|
||||
# GetUserInfoBySessionUser
|
||||
############################
|
||||
|
||||
|
||||
@router.get("/user/info", response_model=Optional[dict])
|
||||
async def get_user_info_by_session_user(user=Depends(get_verified_user)):
|
||||
user = Users.get_user_by_id(user.id)
|
||||
if user:
|
||||
return user.info
|
||||
else:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail=ERROR_MESSAGES.USER_NOT_FOUND,
|
||||
)
|
||||
|
||||
|
||||
############################
|
||||
# UpdateUserInfoBySessionUser
|
||||
############################
|
||||
|
||||
|
||||
@router.post("/user/info/update", response_model=Optional[dict])
|
||||
async def update_user_settings_by_session_user(
|
||||
form_data: dict, user=Depends(get_verified_user)
|
||||
):
|
||||
user = Users.get_user_by_id(user.id)
|
||||
if user:
|
||||
if user.info is None:
|
||||
user.info = {}
|
||||
|
||||
user = Users.update_user_by_id(user.id, {"info": {**user.info, **form_data}})
|
||||
if user:
|
||||
return user.info
|
||||
else:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail=ERROR_MESSAGES.USER_NOT_FOUND,
|
||||
)
|
||||
else:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail=ERROR_MESSAGES.USER_NOT_FOUND,
|
||||
)
|
||||
|
||||
|
||||
############################
|
||||
# GetUserById
|
||||
############################
|
||||
|
|
|
|||
|
|
@ -294,6 +294,7 @@ WEBUI_AUTH = os.environ.get("WEBUI_AUTH", "True").lower() == "true"
|
|||
WEBUI_AUTH_TRUSTED_EMAIL_HEADER = os.environ.get(
|
||||
"WEBUI_AUTH_TRUSTED_EMAIL_HEADER", None
|
||||
)
|
||||
WEBUI_AUTH_TRUSTED_NAME_HEADER = os.environ.get("WEBUI_AUTH_TRUSTED_NAME_HEADER", None)
|
||||
JWT_EXPIRES_IN = PersistentConfig(
|
||||
"JWT_EXPIRES_IN", "auth.jwt_expiry", os.environ.get("JWT_EXPIRES_IN", "-1")
|
||||
)
|
||||
|
|
@ -425,7 +426,14 @@ OLLAMA_API_BASE_URL = os.environ.get(
|
|||
)
|
||||
|
||||
OLLAMA_BASE_URL = os.environ.get("OLLAMA_BASE_URL", "")
|
||||
AIOHTTP_CLIENT_TIMEOUT = int(os.environ.get("AIOHTTP_CLIENT_TIMEOUT", "300"))
|
||||
AIOHTTP_CLIENT_TIMEOUT = os.environ.get("AIOHTTP_CLIENT_TIMEOUT", "300")
|
||||
|
||||
if AIOHTTP_CLIENT_TIMEOUT == "":
|
||||
AIOHTTP_CLIENT_TIMEOUT = None
|
||||
else:
|
||||
AIOHTTP_CLIENT_TIMEOUT = int(AIOHTTP_CLIENT_TIMEOUT)
|
||||
|
||||
|
||||
K8S_FLAG = os.environ.get("K8S_FLAG", "")
|
||||
USE_OLLAMA_DOCKER = os.environ.get("USE_OLLAMA_DOCKER", "false")
|
||||
|
||||
|
|
@ -1009,6 +1017,30 @@ COMFYUI_BASE_URL = PersistentConfig(
|
|||
os.getenv("COMFYUI_BASE_URL", ""),
|
||||
)
|
||||
|
||||
COMFYUI_CFG_SCALE = PersistentConfig(
|
||||
"COMFYUI_CFG_SCALE",
|
||||
"image_generation.comfyui.cfg_scale",
|
||||
os.getenv("COMFYUI_CFG_SCALE", ""),
|
||||
)
|
||||
|
||||
COMFYUI_SAMPLER = PersistentConfig(
|
||||
"COMFYUI_SAMPLER",
|
||||
"image_generation.comfyui.sampler",
|
||||
os.getenv("COMFYUI_SAMPLER", ""),
|
||||
)
|
||||
|
||||
COMFYUI_SCHEDULER = PersistentConfig(
|
||||
"COMFYUI_SCHEDULER",
|
||||
"image_generation.comfyui.scheduler",
|
||||
os.getenv("COMFYUI_SCHEDULER", ""),
|
||||
)
|
||||
|
||||
COMFYUI_SD3 = PersistentConfig(
|
||||
"COMFYUI_SD3",
|
||||
"image_generation.comfyui.sd3",
|
||||
os.environ.get("COMFYUI_SD3", "").lower() == "true",
|
||||
)
|
||||
|
||||
IMAGES_OPENAI_API_BASE_URL = PersistentConfig(
|
||||
"IMAGES_OPENAI_API_BASE_URL",
|
||||
"image_generation.openai.api_base_url",
|
||||
|
|
|
|||
|
|
@ -764,7 +764,12 @@ async def generate_title(form_data: dict, user=Depends(get_verified_user)):
|
|||
template = app.state.config.TITLE_GENERATION_PROMPT_TEMPLATE
|
||||
|
||||
content = title_generation_template(
|
||||
template, form_data["prompt"], user.model_dump()
|
||||
template,
|
||||
form_data["prompt"],
|
||||
{
|
||||
"name": user.name,
|
||||
"location": user.info.get("location") if user.info else None,
|
||||
},
|
||||
)
|
||||
|
||||
payload = {
|
||||
|
|
@ -776,7 +781,7 @@ async def generate_title(form_data: dict, user=Depends(get_verified_user)):
|
|||
"title": True,
|
||||
}
|
||||
|
||||
print(payload)
|
||||
log.debug(payload)
|
||||
|
||||
try:
|
||||
payload = filter_pipeline(payload, user)
|
||||
|
|
@ -830,7 +835,7 @@ async def generate_search_query(form_data: dict, user=Depends(get_verified_user)
|
|||
template = app.state.config.SEARCH_QUERY_GENERATION_PROMPT_TEMPLATE
|
||||
|
||||
content = search_query_generation_template(
|
||||
template, form_data["prompt"], user.model_dump()
|
||||
template, form_data["prompt"], {"name": user.name}
|
||||
)
|
||||
|
||||
payload = {
|
||||
|
|
@ -893,7 +898,12 @@ Message: """{{prompt}}"""
|
|||
'''
|
||||
|
||||
content = title_generation_template(
|
||||
template, form_data["prompt"], user.model_dump()
|
||||
template,
|
||||
form_data["prompt"],
|
||||
{
|
||||
"name": user.name,
|
||||
"location": user.info.get("location") if user.info else None,
|
||||
},
|
||||
)
|
||||
|
||||
payload = {
|
||||
|
|
@ -905,7 +915,7 @@ Message: """{{prompt}}"""
|
|||
"task": True,
|
||||
}
|
||||
|
||||
print(payload)
|
||||
log.debug(payload)
|
||||
|
||||
try:
|
||||
payload = filter_pipeline(payload, user)
|
||||
|
|
|
|||
|
|
@ -6,24 +6,28 @@ from typing import Optional
|
|||
|
||||
|
||||
def prompt_template(
|
||||
template: str, user_name: str = None, current_location: str = None
|
||||
template: str, user_name: str = None, user_location: str = None
|
||||
) -> str:
|
||||
# Get the current date
|
||||
current_date = datetime.now()
|
||||
|
||||
# Format the date to YYYY-MM-DD
|
||||
formatted_date = current_date.strftime("%Y-%m-%d")
|
||||
formatted_time = current_date.strftime("%I:%M:%S %p")
|
||||
|
||||
# Replace {{CURRENT_DATE}} in the template with the formatted date
|
||||
template = template.replace("{{CURRENT_DATE}}", formatted_date)
|
||||
template = template.replace("{{CURRENT_TIME}}", formatted_time)
|
||||
template = template.replace(
|
||||
"{{CURRENT_DATETIME}}", f"{formatted_date} {formatted_time}"
|
||||
)
|
||||
|
||||
if user_name:
|
||||
# Replace {{USER_NAME}} in the template with the user's name
|
||||
template = template.replace("{{USER_NAME}}", user_name)
|
||||
|
||||
if current_location:
|
||||
# Replace {{CURRENT_LOCATION}} in the template with the current location
|
||||
template = template.replace("{{CURRENT_LOCATION}}", current_location)
|
||||
if user_location:
|
||||
# Replace {{USER_LOCATION}} in the template with the current location
|
||||
template = template.replace("{{USER_LOCATION}}", user_location)
|
||||
|
||||
return template
|
||||
|
||||
|
|
@ -61,7 +65,7 @@ def title_generation_template(
|
|||
template = prompt_template(
|
||||
template,
|
||||
**(
|
||||
{"user_name": user.get("name"), "current_location": user.get("location")}
|
||||
{"user_name": user.get("name"), "user_location": user.get("location")}
|
||||
if user
|
||||
else {}
|
||||
),
|
||||
|
|
@ -104,7 +108,7 @@ def search_query_generation_template(
|
|||
template = prompt_template(
|
||||
template,
|
||||
**(
|
||||
{"user_name": user.get("name"), "current_location": user.get("location")}
|
||||
{"user_name": user.get("name"), "user_location": user.get("location")}
|
||||
if user
|
||||
else {}
|
||||
),
|
||||
|
|
|
|||
4
package-lock.json
generated
4
package-lock.json
generated
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "open-webui",
|
||||
"version": "0.3.4",
|
||||
"version": "0.3.5",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "open-webui",
|
||||
"version": "0.3.4",
|
||||
"version": "0.3.5",
|
||||
"dependencies": {
|
||||
"@codemirror/lang-javascript": "^6.2.2",
|
||||
"@codemirror/lang-python": "^6.1.6",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "open-webui",
|
||||
"version": "0.3.4",
|
||||
"version": "0.3.5",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "npm run pyodide:fetch && vite dev --host",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import { WEBUI_API_BASE_URL } from '$lib/constants';
|
||||
import { getUserPosition } from '$lib/utils';
|
||||
|
||||
export const getUserPermissions = async (token: string) => {
|
||||
let error = null;
|
||||
|
|
@ -198,6 +199,75 @@ export const getUserById = async (token: string, userId: string) => {
|
|||
return res;
|
||||
};
|
||||
|
||||
export const getUserInfo = async (token: string) => {
|
||||
let error = null;
|
||||
const res = await fetch(`${WEBUI_API_BASE_URL}/users/user/info`, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
Authorization: `Bearer ${token}`
|
||||
}
|
||||
})
|
||||
.then(async (res) => {
|
||||
if (!res.ok) throw await res.json();
|
||||
return res.json();
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
error = err.detail;
|
||||
return null;
|
||||
});
|
||||
|
||||
if (error) {
|
||||
throw error;
|
||||
}
|
||||
|
||||
return res;
|
||||
};
|
||||
|
||||
export const updateUserInfo = async (token: string, info: object) => {
|
||||
let error = null;
|
||||
|
||||
const res = await fetch(`${WEBUI_API_BASE_URL}/users/user/info/update`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
Authorization: `Bearer ${token}`
|
||||
},
|
||||
body: JSON.stringify({
|
||||
...info
|
||||
})
|
||||
})
|
||||
.then(async (res) => {
|
||||
if (!res.ok) throw await res.json();
|
||||
return res.json();
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
error = err.detail;
|
||||
return null;
|
||||
});
|
||||
|
||||
if (error) {
|
||||
throw error;
|
||||
}
|
||||
|
||||
return res;
|
||||
};
|
||||
|
||||
export const getAndUpdateUserLocation = async (token: string) => {
|
||||
const location = await getUserPosition().catch((err) => {
|
||||
throw err;
|
||||
});
|
||||
|
||||
if (location) {
|
||||
await updateUserInfo(token, { location: location });
|
||||
return location;
|
||||
} else {
|
||||
throw new Error('Failed to get user location');
|
||||
}
|
||||
};
|
||||
|
||||
export const deleteUserById = async (token: string, userId: string) => {
|
||||
let error = null;
|
||||
|
||||
|
|
|
|||
|
|
@ -44,6 +44,8 @@
|
|||
let ENABLE_OLLAMA_API = null;
|
||||
|
||||
const verifyOpenAIHandler = async (idx) => {
|
||||
OPENAI_API_BASE_URLS = OPENAI_API_BASE_URLS.map((url) => url.replace(/\/$/, ''));
|
||||
|
||||
OPENAI_API_BASE_URLS = await updateOpenAIUrls(localStorage.token, OPENAI_API_BASE_URLS);
|
||||
OPENAI_API_KEYS = await updateOpenAIKeys(localStorage.token, OPENAI_API_KEYS);
|
||||
|
||||
|
|
@ -63,6 +65,10 @@
|
|||
};
|
||||
|
||||
const verifyOllamaHandler = async (idx) => {
|
||||
OLLAMA_BASE_URLS = OLLAMA_BASE_URLS.filter((url) => url !== '').map((url) =>
|
||||
url.replace(/\/$/, '')
|
||||
);
|
||||
|
||||
OLLAMA_BASE_URLS = await updateOllamaUrls(localStorage.token, OLLAMA_BASE_URLS);
|
||||
|
||||
const res = await getOllamaVersion(localStorage.token, idx).catch((error) => {
|
||||
|
|
@ -78,6 +84,8 @@
|
|||
};
|
||||
|
||||
const updateOpenAIHandler = async () => {
|
||||
OPENAI_API_BASE_URLS = OPENAI_API_BASE_URLS.map((url) => url.replace(/\/$/, ''));
|
||||
|
||||
// Check if API KEYS length is same than API URLS length
|
||||
if (OPENAI_API_KEYS.length !== OPENAI_API_BASE_URLS.length) {
|
||||
// if there are more keys than urls, remove the extra keys
|
||||
|
|
@ -100,7 +108,10 @@
|
|||
};
|
||||
|
||||
const updateOllamaUrlsHandler = async () => {
|
||||
OLLAMA_BASE_URLS = OLLAMA_BASE_URLS.filter((url) => url !== '');
|
||||
OLLAMA_BASE_URLS = OLLAMA_BASE_URLS.filter((url) => url !== '').map((url) =>
|
||||
url.replace(/\/$/, '')
|
||||
);
|
||||
|
||||
console.log(OLLAMA_BASE_URLS);
|
||||
|
||||
if (OLLAMA_BASE_URLS.length === 0) {
|
||||
|
|
|
|||
|
|
@ -31,6 +31,17 @@
|
|||
}
|
||||
})();
|
||||
}
|
||||
|
||||
let sortKey = 'updated_at'; // default sort key
|
||||
let sortOrder = 'desc'; // default sort order
|
||||
function setSortKey(key) {
|
||||
if (sortKey === key) {
|
||||
sortOrder = sortOrder === 'asc' ? 'desc' : 'asc';
|
||||
} else {
|
||||
sortKey = key;
|
||||
sortOrder = 'asc';
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<Modal size="lg" bind:show>
|
||||
|
|
@ -69,18 +80,56 @@
|
|||
class="text-xs text-gray-700 uppercase bg-transparent dark:text-gray-200 border-b-2 dark:border-gray-800"
|
||||
>
|
||||
<tr>
|
||||
<th scope="col" class="px-3 py-2"> {$i18n.t('Name')} </th>
|
||||
<th scope="col" class="px-3 py-2 hidden md:flex"> {$i18n.t('Created at')} </th>
|
||||
<th
|
||||
scope="col"
|
||||
class="px-3 py-2 cursor-pointer select-none"
|
||||
on:click={() => setSortKey('title')}
|
||||
>
|
||||
{$i18n.t('Title')}
|
||||
{#if sortKey === 'title'}
|
||||
{sortOrder === 'asc' ? '▲' : '▼'}
|
||||
{:else}
|
||||
<span class="invisible">▲</span>
|
||||
{/if}
|
||||
</th>
|
||||
<th
|
||||
scope="col"
|
||||
class="px-3 py-2 cursor-pointer select-none"
|
||||
on:click={() => setSortKey('created_at')}
|
||||
>
|
||||
{$i18n.t('Created at')}
|
||||
{#if sortKey === 'created_at'}
|
||||
{sortOrder === 'asc' ? '▲' : '▼'}
|
||||
{:else}
|
||||
<span class="invisible">▲</span>
|
||||
{/if}
|
||||
</th>
|
||||
<th
|
||||
scope="col"
|
||||
class="px-3 py-2 hidden md:flex cursor-pointer select-none"
|
||||
on:click={() => setSortKey('updated_at')}
|
||||
>
|
||||
{$i18n.t('Updated at')}
|
||||
{#if sortKey === 'updated_at'}
|
||||
{sortOrder === 'asc' ? '▲' : '▼'}
|
||||
{:else}
|
||||
<span class="invisible">▲</span>
|
||||
{/if}
|
||||
</th>
|
||||
<th scope="col" class="px-3 py-2 text-right" />
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{#each chats as chat, idx}
|
||||
{#each chats.sort((a, b) => {
|
||||
if (a[sortKey] < b[sortKey]) return sortOrder === 'asc' ? -1 : 1;
|
||||
if (a[sortKey] > b[sortKey]) return sortOrder === 'asc' ? 1 : -1;
|
||||
return 0;
|
||||
}) as chat, idx}
|
||||
<tr
|
||||
class="bg-transparent {idx !== chats.length - 1 &&
|
||||
'border-b'} dark:bg-gray-900 dark:border-gray-850 text-xs"
|
||||
>
|
||||
<td class="px-3 py-1 w-2/3">
|
||||
<td class="px-3 py-1">
|
||||
<a href="/s/{chat.id}" target="_blank">
|
||||
<div class=" underline line-clamp-1">
|
||||
{chat.title}
|
||||
|
|
@ -88,11 +137,16 @@
|
|||
</a>
|
||||
</td>
|
||||
|
||||
<td class=" px-3 py-1 hidden md:flex h-[2.5rem]">
|
||||
<td class=" px-3 py-1 h-[2.5rem]">
|
||||
<div class="my-auto">
|
||||
{dayjs(chat.created_at * 1000).format($i18n.t('MMMM DD, YYYY HH:mm'))}
|
||||
</div>
|
||||
</td>
|
||||
<td class=" px-3 py-1 hidden md:flex h-[2.5rem]">
|
||||
<div class="my-auto">
|
||||
{dayjs(chat.updated_at * 1000).format($i18n.t('MMMM DD, YYYY HH:mm'))}
|
||||
</div>
|
||||
</td>
|
||||
|
||||
<td class="px-3 py-1 text-right">
|
||||
<div class="flex justify-end w-full">
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
convertMessagesToHistory,
|
||||
copyToClipboard,
|
||||
extractSentencesForAudio,
|
||||
getUserPosition,
|
||||
promptTemplate,
|
||||
splitStream
|
||||
} from '$lib/utils';
|
||||
|
|
@ -50,7 +51,7 @@
|
|||
import { runWebSearch } from '$lib/apis/rag';
|
||||
import { createOpenAITextStream } from '$lib/apis/streaming';
|
||||
import { queryMemory } from '$lib/apis/memories';
|
||||
import { getUserSettings } from '$lib/apis/users';
|
||||
import { getAndUpdateUserLocation, getUserSettings } from '$lib/apis/users';
|
||||
import { chatCompleted, generateTitle, generateSearchQuery } from '$lib/apis';
|
||||
|
||||
import Banner from '../common/Banner.svelte';
|
||||
|
|
@ -533,7 +534,13 @@
|
|||
$settings.system || (responseMessage?.userContext ?? null)
|
||||
? {
|
||||
role: 'system',
|
||||
content: `${promptTemplate($settings?.system ?? '', $user.name)}${
|
||||
content: `${promptTemplate(
|
||||
$settings?.system ?? '',
|
||||
$user.name,
|
||||
$settings?.userLocation
|
||||
? await getAndUpdateUserLocation(localStorage.token)
|
||||
: undefined
|
||||
)}${
|
||||
responseMessage?.userContext ?? null
|
||||
? `\n\nUser Context:\n${(responseMessage?.userContext ?? []).join('\n')}`
|
||||
: ''
|
||||
|
|
@ -871,7 +878,13 @@
|
|||
$settings.system || (responseMessage?.userContext ?? null)
|
||||
? {
|
||||
role: 'system',
|
||||
content: `${promptTemplate($settings?.system ?? '', $user.name)}${
|
||||
content: `${promptTemplate(
|
||||
$settings?.system ?? '',
|
||||
$user.name,
|
||||
$settings?.userLocation
|
||||
? await getAndUpdateUserLocation(localStorage.token)
|
||||
: undefined
|
||||
)}${
|
||||
responseMessage?.userContext ?? null
|
||||
? `\n\nUser Context:\n${(responseMessage?.userContext ?? []).join('\n')}`
|
||||
: ''
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
let loading = false;
|
||||
let confirmed = false;
|
||||
let interrupted = false;
|
||||
let assistantSpeaking = false;
|
||||
|
||||
let emoji = null;
|
||||
|
||||
|
|
@ -268,6 +269,15 @@
|
|||
return;
|
||||
}
|
||||
|
||||
if (assistantSpeaking) {
|
||||
// Mute the audio if the assistant is speaking
|
||||
analyser.maxDecibels = 0;
|
||||
analyser.minDecibels = -1;
|
||||
} else {
|
||||
analyser.minDecibels = MIN_DECIBELS;
|
||||
analyser.maxDecibels = -30;
|
||||
}
|
||||
|
||||
analyser.getByteTimeDomainData(timeDomainData);
|
||||
analyser.getByteFrequencyData(domainData);
|
||||
|
||||
|
|
@ -379,6 +389,7 @@
|
|||
};
|
||||
|
||||
const stopAllAudio = async () => {
|
||||
assistantSpeaking = false;
|
||||
interrupted = true;
|
||||
|
||||
if (chatStreaming) {
|
||||
|
|
@ -485,6 +496,7 @@
|
|||
}
|
||||
} else if (finishedMessages[id] && messages[id] && messages[id].length === 0) {
|
||||
// If the message is finished and there are no more messages to process, break the loop
|
||||
assistantSpeaking = false;
|
||||
break;
|
||||
} else {
|
||||
// No messages to process, sleep for a bit
|
||||
|
|
@ -511,6 +523,7 @@
|
|||
}
|
||||
audioAbortController = new AbortController();
|
||||
|
||||
assistantSpeaking = true;
|
||||
// Start monitoring and playing audio for the message ID
|
||||
monitorAndPlayAudio(id, audioAbortController.signal);
|
||||
}
|
||||
|
|
@ -545,9 +558,9 @@
|
|||
const chatFinishHandler = async (e) => {
|
||||
const { id, content } = e.detail;
|
||||
// "content" here is the entire message from the assistant
|
||||
finishedMessages[id] = true;
|
||||
|
||||
chatStreaming = false;
|
||||
finishedMessages[id] = true;
|
||||
};
|
||||
|
||||
eventTarget.addEventListener('chat:start', chatStartHandler);
|
||||
|
|
@ -577,7 +590,15 @@
|
|||
>
|
||||
<div class="max-w-lg w-full h-screen max-h-[100dvh] flex flex-col justify-between p-3 md:p-6">
|
||||
{#if camera}
|
||||
<div class="flex justify-center items-center w-full h-20 min-h-20">
|
||||
<button
|
||||
type="button"
|
||||
class="flex justify-center items-center w-full h-20 min-h-20"
|
||||
on:click={() => {
|
||||
if (assistantSpeaking) {
|
||||
stopAllAudio();
|
||||
}
|
||||
}}
|
||||
>
|
||||
{#if emoji}
|
||||
<div
|
||||
class=" transition-all rounded-full"
|
||||
|
|
@ -591,7 +612,7 @@
|
|||
>
|
||||
{emoji}
|
||||
</div>
|
||||
{:else if loading}
|
||||
{:else if loading || assistantSpeaking}
|
||||
<svg
|
||||
class="size-12 text-gray-900 dark:text-gray-400"
|
||||
viewBox="0 0 24 24"
|
||||
|
|
@ -640,72 +661,81 @@
|
|||
/>
|
||||
{/if}
|
||||
<!-- navbar -->
|
||||
</div>
|
||||
</button>
|
||||
{/if}
|
||||
|
||||
<div class="flex justify-center items-center flex-1 h-full w-full max-h-full">
|
||||
{#if !camera}
|
||||
{#if emoji}
|
||||
<div
|
||||
class=" transition-all rounded-full"
|
||||
style="font-size:{rmsLevel * 100 > 4
|
||||
? '13'
|
||||
: rmsLevel * 100 > 2
|
||||
? '12'
|
||||
: rmsLevel * 100 > 1
|
||||
? '11.5'
|
||||
: '11'}rem;width:100%;text-align:center;"
|
||||
>
|
||||
{emoji}
|
||||
</div>
|
||||
{:else if loading}
|
||||
<svg
|
||||
class="size-44 text-gray-900 dark:text-gray-400"
|
||||
viewBox="0 0 24 24"
|
||||
fill="currentColor"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
><style>
|
||||
.spinner_qM83 {
|
||||
animation: spinner_8HQG 1.05s infinite;
|
||||
}
|
||||
.spinner_oXPr {
|
||||
animation-delay: 0.1s;
|
||||
}
|
||||
.spinner_ZTLf {
|
||||
animation-delay: 0.2s;
|
||||
}
|
||||
@keyframes spinner_8HQG {
|
||||
0%,
|
||||
57.14% {
|
||||
animation-timing-function: cubic-bezier(0.33, 0.66, 0.66, 1);
|
||||
transform: translate(0);
|
||||
<button
|
||||
type="button"
|
||||
on:click={() => {
|
||||
if (assistantSpeaking) {
|
||||
stopAllAudio();
|
||||
}
|
||||
}}
|
||||
>
|
||||
{#if emoji}
|
||||
<div
|
||||
class=" transition-all rounded-full"
|
||||
style="font-size:{rmsLevel * 100 > 4
|
||||
? '13'
|
||||
: rmsLevel * 100 > 2
|
||||
? '12'
|
||||
: rmsLevel * 100 > 1
|
||||
? '11.5'
|
||||
: '11'}rem;width:100%;text-align:center;"
|
||||
>
|
||||
{emoji}
|
||||
</div>
|
||||
{:else if loading || assistantSpeaking}
|
||||
<svg
|
||||
class="size-44 text-gray-900 dark:text-gray-400"
|
||||
viewBox="0 0 24 24"
|
||||
fill="currentColor"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
><style>
|
||||
.spinner_qM83 {
|
||||
animation: spinner_8HQG 1.05s infinite;
|
||||
}
|
||||
28.57% {
|
||||
animation-timing-function: cubic-bezier(0.33, 0, 0.66, 0.33);
|
||||
transform: translateY(-6px);
|
||||
.spinner_oXPr {
|
||||
animation-delay: 0.1s;
|
||||
}
|
||||
100% {
|
||||
transform: translate(0);
|
||||
.spinner_ZTLf {
|
||||
animation-delay: 0.2s;
|
||||
}
|
||||
}
|
||||
</style><circle class="spinner_qM83" cx="4" cy="12" r="3" /><circle
|
||||
class="spinner_qM83 spinner_oXPr"
|
||||
cx="12"
|
||||
cy="12"
|
||||
r="3"
|
||||
/><circle class="spinner_qM83 spinner_ZTLf" cx="20" cy="12" r="3" /></svg
|
||||
>
|
||||
{:else}
|
||||
<div
|
||||
class=" {rmsLevel * 100 > 4
|
||||
? ' size-52'
|
||||
: rmsLevel * 100 > 2
|
||||
? 'size-48'
|
||||
: rmsLevel * 100 > 1
|
||||
? 'size-[11.5rem]'
|
||||
: 'size-44'} transition-all bg-black dark:bg-white rounded-full"
|
||||
/>
|
||||
{/if}
|
||||
@keyframes spinner_8HQG {
|
||||
0%,
|
||||
57.14% {
|
||||
animation-timing-function: cubic-bezier(0.33, 0.66, 0.66, 1);
|
||||
transform: translate(0);
|
||||
}
|
||||
28.57% {
|
||||
animation-timing-function: cubic-bezier(0.33, 0, 0.66, 0.33);
|
||||
transform: translateY(-6px);
|
||||
}
|
||||
100% {
|
||||
transform: translate(0);
|
||||
}
|
||||
}
|
||||
</style><circle class="spinner_qM83" cx="4" cy="12" r="3" /><circle
|
||||
class="spinner_qM83 spinner_oXPr"
|
||||
cx="12"
|
||||
cy="12"
|
||||
r="3"
|
||||
/><circle class="spinner_qM83 spinner_ZTLf" cx="20" cy="12" r="3" /></svg
|
||||
>
|
||||
{:else}
|
||||
<div
|
||||
class=" {rmsLevel * 100 > 4
|
||||
? ' size-52'
|
||||
: rmsLevel * 100 > 2
|
||||
? 'size-48'
|
||||
: rmsLevel * 100 > 1
|
||||
? 'size-[11.5rem]'
|
||||
: 'size-44'} transition-all bg-black dark:bg-white rounded-full"
|
||||
/>
|
||||
{/if}
|
||||
</button>
|
||||
{:else}
|
||||
<div
|
||||
class="relative flex video-container w-full max-h-full pt-2 pb-4 md:py-6 px-2 h-full"
|
||||
|
|
@ -805,10 +835,19 @@
|
|||
</div>
|
||||
|
||||
<div>
|
||||
<button type="button">
|
||||
<button
|
||||
type="button"
|
||||
on:click={() => {
|
||||
if (assistantSpeaking) {
|
||||
stopAllAudio();
|
||||
}
|
||||
}}
|
||||
>
|
||||
<div class=" line-clamp-1 text-sm font-medium">
|
||||
{#if loading}
|
||||
{$i18n.t('Thinking...')}
|
||||
{:else if assistantSpeaking}
|
||||
{$i18n.t('Tap to interrupt')}
|
||||
{:else}
|
||||
{$i18n.t('Listening...')}
|
||||
{/if}
|
||||
|
|
|
|||
|
|
@ -102,17 +102,19 @@
|
|||
|
||||
{#if filteredItems.length > 0 || prompt.split(' ')?.at(0)?.substring(1).startsWith('http')}
|
||||
<div class="pl-1 pr-12 mb-3 text-left w-full absolute bottom-0 left-0 right-0">
|
||||
<div class="flex w-full px-2">
|
||||
<div class=" bg-gray-100 dark:bg-gray-700 w-10 rounded-l-xl text-center">
|
||||
<div class="flex w-full dark:border dark:border-gray-850 rounded-lg">
|
||||
<div class=" bg-gray-50 dark:bg-gray-850 w-10 rounded-l-lg text-center">
|
||||
<div class=" text-lg font-semibold mt-2">#</div>
|
||||
</div>
|
||||
|
||||
<div class="max-h-60 flex flex-col w-full rounded-r-xl bg-white">
|
||||
<div class="m-1 overflow-y-auto p-1 rounded-r-xl space-y-0.5">
|
||||
<div
|
||||
class="max-h-60 flex flex-col w-full rounded-r-xl bg-white dark:bg-gray-900 dark:text-gray-100"
|
||||
>
|
||||
<div class="m-1 overflow-y-auto p-1 rounded-r-xl space-y-0.5 scrollbar-hidden">
|
||||
{#each filteredItems as doc, docIdx}
|
||||
<button
|
||||
class=" px-3 py-1.5 rounded-xl w-full text-left {docIdx === selectedIdx
|
||||
? ' bg-gray-100 selected-command-option-button'
|
||||
? ' bg-gray-50 dark:bg-gray-850 dark:text-gray-100 selected-command-option-button'
|
||||
: ''}"
|
||||
type="button"
|
||||
on:click={() => {
|
||||
|
|
@ -126,17 +128,19 @@
|
|||
on:focus={() => {}}
|
||||
>
|
||||
{#if doc.type === 'collection'}
|
||||
<div class=" font-medium text-black line-clamp-1">
|
||||
<div class=" font-medium text-black dark:text-gray-100 line-clamp-1">
|
||||
{doc?.title ?? `#${doc.name}`}
|
||||
</div>
|
||||
|
||||
<div class=" text-xs text-gray-600 line-clamp-1">{$i18n.t('Collection')}</div>
|
||||
<div class=" text-xs text-gray-600 dark:text-gray-100 line-clamp-1">
|
||||
{$i18n.t('Collection')}
|
||||
</div>
|
||||
{:else}
|
||||
<div class=" font-medium text-black line-clamp-1">
|
||||
<div class=" font-medium text-black dark:text-gray-100 line-clamp-1">
|
||||
#{doc.name} ({doc.filename})
|
||||
</div>
|
||||
|
||||
<div class=" text-xs text-gray-600 line-clamp-1">
|
||||
<div class=" text-xs text-gray-600 dark:text-gray-100 line-clamp-1">
|
||||
{doc.title}
|
||||
</div>
|
||||
{/if}
|
||||
|
|
|
|||
|
|
@ -134,17 +134,19 @@
|
|||
{#if prompt.charAt(0) === '@'}
|
||||
{#if filteredModels.length > 0}
|
||||
<div class="pl-1 pr-12 mb-3 text-left w-full absolute bottom-0 left-0 right-0">
|
||||
<div class="flex w-full px-2">
|
||||
<div class=" bg-gray-100 dark:bg-gray-700 w-10 rounded-l-xl text-center">
|
||||
<div class="flex w-full dark:border dark:border-gray-850 rounded-lg">
|
||||
<div class=" bg-gray-50 dark:bg-gray-850 w-10 rounded-l-lg text-center">
|
||||
<div class=" text-lg font-semibold mt-2">@</div>
|
||||
</div>
|
||||
|
||||
<div class="max-h-60 flex flex-col w-full rounded-r-xl bg-white">
|
||||
<div class="m-1 overflow-y-auto p-1 rounded-r-xl space-y-0.5">
|
||||
<div
|
||||
class="max-h-60 flex flex-col w-full rounded-r-lg bg-white dark:bg-gray-900 dark:text-gray-100"
|
||||
>
|
||||
<div class="m-1 overflow-y-auto p-1 rounded-r-lg space-y-0.5 scrollbar-hidden">
|
||||
{#each filteredModels as model, modelIdx}
|
||||
<button
|
||||
class=" px-3 py-1.5 rounded-xl w-full text-left {modelIdx === selectedIdx
|
||||
? ' bg-gray-100 selected-command-option-button'
|
||||
? ' bg-gray-50 dark:bg-gray-850 selected-command-option-button'
|
||||
: ''}"
|
||||
type="button"
|
||||
on:click={() => {
|
||||
|
|
@ -155,7 +157,7 @@
|
|||
}}
|
||||
on:focus={() => {}}
|
||||
>
|
||||
<div class=" font-medium text-black line-clamp-1">
|
||||
<div class=" font-medium text-black dark:text-gray-100 line-clamp-1">
|
||||
{model.name}
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -89,17 +89,19 @@
|
|||
|
||||
{#if filteredPromptCommands.length > 0}
|
||||
<div class="pl-1 pr-12 mb-3 text-left w-full absolute bottom-0 left-0 right-0">
|
||||
<div class="flex w-full px-2">
|
||||
<div class=" bg-gray-100 dark:bg-gray-700 w-10 rounded-l-xl text-center">
|
||||
<div class="flex w-full dark:border dark:border-gray-850 rounded-lg">
|
||||
<div class=" bg-gray-50 dark:bg-gray-850 w-10 rounded-l-lg text-center">
|
||||
<div class=" text-lg font-semibold mt-2">/</div>
|
||||
</div>
|
||||
|
||||
<div class="max-h-60 flex flex-col w-full rounded-r-xl bg-white">
|
||||
<div class="m-1 overflow-y-auto p-1 rounded-r-xl space-y-0.5">
|
||||
<div
|
||||
class="max-h-60 flex flex-col w-full rounded-r-lg bg-white dark:bg-gray-900 dark:text-gray-100"
|
||||
>
|
||||
<div class="m-1 overflow-y-auto p-1 rounded-r-lg space-y-0.5 scrollbar-hidden">
|
||||
{#each filteredPromptCommands as command, commandIdx}
|
||||
<button
|
||||
class=" px-3 py-1.5 rounded-xl w-full text-left {commandIdx === selectedCommandIdx
|
||||
? ' bg-gray-100 selected-command-option-button'
|
||||
? ' bg-gray-50 dark:bg-gray-850 selected-command-option-button'
|
||||
: ''}"
|
||||
type="button"
|
||||
on:click={() => {
|
||||
|
|
@ -110,11 +112,11 @@
|
|||
}}
|
||||
on:focus={() => {}}
|
||||
>
|
||||
<div class=" font-medium text-black">
|
||||
<div class=" font-medium text-black dark:text-gray-100">
|
||||
{command.command}
|
||||
</div>
|
||||
|
||||
<div class=" text-xs text-gray-600">
|
||||
<div class=" text-xs text-gray-600 dark:text-gray-100">
|
||||
{command.title}
|
||||
</div>
|
||||
</button>
|
||||
|
|
@ -122,7 +124,7 @@
|
|||
</div>
|
||||
|
||||
<div
|
||||
class=" px-2 pb-1 text-xs text-gray-600 bg-white rounded-br-xl flex items-center space-x-1"
|
||||
class=" px-2 pb-1 text-xs text-gray-600 dark:text-gray-100 bg-white dark:bg-gray-900 rounded-br-xl flex items-center space-x-1"
|
||||
>
|
||||
<div>
|
||||
<svg
|
||||
|
|
|
|||
|
|
@ -202,38 +202,51 @@
|
|||
}, 100);
|
||||
};
|
||||
|
||||
const messageDeleteHandler = async (messageId) => {
|
||||
const deleteMessageHandler = async (messageId) => {
|
||||
const messageToDelete = history.messages[messageId];
|
||||
const messageParentId = messageToDelete.parentId;
|
||||
const messageChildrenIds = messageToDelete.childrenIds ?? [];
|
||||
const hasSibling = messageChildrenIds.some(
|
||||
|
||||
const parentMessageId = messageToDelete.parentId;
|
||||
const childMessageIds = messageToDelete.childrenIds ?? [];
|
||||
|
||||
const hasDescendantMessages = childMessageIds.some(
|
||||
(childId) => history.messages[childId]?.childrenIds?.length > 0
|
||||
);
|
||||
messageChildrenIds.forEach((childId) => {
|
||||
const child = history.messages[childId];
|
||||
if (child && child.childrenIds) {
|
||||
if (child.childrenIds.length === 0 && !hasSibling) {
|
||||
// if last prompt/response pair
|
||||
history.messages[messageParentId].childrenIds = [];
|
||||
history.currentId = messageParentId;
|
||||
|
||||
history.currentId = parentMessageId;
|
||||
await tick();
|
||||
|
||||
// Remove the message itself from the parent message's children array
|
||||
history.messages[parentMessageId].childrenIds = history.messages[
|
||||
parentMessageId
|
||||
].childrenIds.filter((id) => id !== messageId);
|
||||
|
||||
await tick();
|
||||
|
||||
childMessageIds.forEach((childId) => {
|
||||
const childMessage = history.messages[childId];
|
||||
|
||||
if (childMessage && childMessage.childrenIds) {
|
||||
if (childMessage.childrenIds.length === 0 && !hasDescendantMessages) {
|
||||
// If there are no other responses/prompts
|
||||
history.messages[parentMessageId].childrenIds = [];
|
||||
} else {
|
||||
child.childrenIds.forEach((grandChildId) => {
|
||||
childMessage.childrenIds.forEach((grandChildId) => {
|
||||
if (history.messages[grandChildId]) {
|
||||
history.messages[grandChildId].parentId = messageParentId;
|
||||
history.messages[messageParentId].childrenIds.push(grandChildId);
|
||||
history.messages[grandChildId].parentId = parentMessageId;
|
||||
history.messages[parentMessageId].childrenIds.push(grandChildId);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
// remove response
|
||||
history.messages[messageParentId].childrenIds = history.messages[
|
||||
messageParentId
|
||||
|
||||
// Remove child message id from the parent message's children array
|
||||
history.messages[parentMessageId].childrenIds = history.messages[
|
||||
parentMessageId
|
||||
].childrenIds.filter((id) => id !== childId);
|
||||
});
|
||||
// remove prompt
|
||||
history.messages[messageParentId].childrenIds = history.messages[
|
||||
messageParentId
|
||||
].childrenIds.filter((id) => id !== messageId);
|
||||
|
||||
await tick();
|
||||
|
||||
await updateChatById(localStorage.token, chatId, {
|
||||
messages: messages,
|
||||
history: history
|
||||
|
|
@ -292,7 +305,7 @@
|
|||
>
|
||||
{#if message.role === 'user'}
|
||||
<UserMessage
|
||||
on:delete={() => messageDeleteHandler(message.id)}
|
||||
on:delete={() => deleteMessageHandler(message.id)}
|
||||
{user}
|
||||
{readOnly}
|
||||
{message}
|
||||
|
|
@ -308,7 +321,7 @@
|
|||
copyToClipboard={copyToClipboardWithToast}
|
||||
/>
|
||||
{:else if $mobile || (history.messages[message.parentId]?.models?.length ?? 1) === 1}
|
||||
{#key message.id}
|
||||
{#key message.id && history.currentId}
|
||||
<ResponseMessage
|
||||
{message}
|
||||
siblings={history.messages[message.parentId]?.childrenIds ?? []}
|
||||
|
|
|
|||
|
|
@ -940,68 +940,68 @@
|
|||
>
|
||||
</button>
|
||||
</Tooltip>
|
||||
{/if}
|
||||
|
||||
{#if isLastMessage && !readOnly}
|
||||
<Tooltip content={$i18n.t('Continue Response')} placement="bottom">
|
||||
<button
|
||||
type="button"
|
||||
class="{isLastMessage
|
||||
? 'visible'
|
||||
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition regenerate-response-button"
|
||||
on:click={() => {
|
||||
continueGeneration();
|
||||
}}
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2.3"
|
||||
stroke="currentColor"
|
||||
class="w-4 h-4"
|
||||
{#if isLastMessage}
|
||||
<Tooltip content={$i18n.t('Continue Response')} placement="bottom">
|
||||
<button
|
||||
type="button"
|
||||
class="{isLastMessage
|
||||
? 'visible'
|
||||
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition regenerate-response-button"
|
||||
on:click={() => {
|
||||
continueGeneration();
|
||||
}}
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"
|
||||
/>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M15.91 11.672a.375.375 0 0 1 0 .656l-5.603 3.113a.375.375 0 0 1-.557-.328V8.887c0-.286.307-.466.557-.327l5.603 3.112Z"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
</Tooltip>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2.3"
|
||||
stroke="currentColor"
|
||||
class="w-4 h-4"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"
|
||||
/>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M15.91 11.672a.375.375 0 0 1 0 .656l-5.603 3.113a.375.375 0 0 1-.557-.328V8.887c0-.286.307-.466.557-.327l5.603 3.112Z"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
</Tooltip>
|
||||
|
||||
<Tooltip content={$i18n.t('Regenerate')} placement="bottom">
|
||||
<button
|
||||
type="button"
|
||||
class="{isLastMessage
|
||||
? 'visible'
|
||||
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition regenerate-response-button"
|
||||
on:click={() => {
|
||||
showRateComment = false;
|
||||
regenerateResponse(message);
|
||||
}}
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2.3"
|
||||
stroke="currentColor"
|
||||
class="w-4 h-4"
|
||||
<Tooltip content={$i18n.t('Regenerate')} placement="bottom">
|
||||
<button
|
||||
type="button"
|
||||
class="{isLastMessage
|
||||
? 'visible'
|
||||
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition regenerate-response-button"
|
||||
on:click={() => {
|
||||
showRateComment = false;
|
||||
regenerateResponse(message);
|
||||
}}
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
</Tooltip>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
stroke-width="2.3"
|
||||
stroke="currentColor"
|
||||
class="w-4 h-4"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
d="M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
</Tooltip>
|
||||
{/if}
|
||||
{/if}
|
||||
{/if}
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@
|
|||
import { createEventDispatcher, onMount, getContext } from 'svelte';
|
||||
import { toast } from 'svelte-sonner';
|
||||
import Tooltip from '$lib/components/common/Tooltip.svelte';
|
||||
import { updateUserInfo } from '$lib/apis/users';
|
||||
import { getUserPosition } from '$lib/utils';
|
||||
const dispatch = createEventDispatcher();
|
||||
|
||||
const i18n = getContext('i18n');
|
||||
|
|
@ -16,6 +18,7 @@
|
|||
let responseAutoCopy = false;
|
||||
let widescreenMode = false;
|
||||
let splitLargeChunks = false;
|
||||
let userLocation = false;
|
||||
|
||||
// Interface
|
||||
let defaultModelId = '';
|
||||
|
|
@ -51,6 +54,26 @@
|
|||
saveSettings({ showEmojiInCall: showEmojiInCall });
|
||||
};
|
||||
|
||||
const toggleUserLocation = async () => {
|
||||
userLocation = !userLocation;
|
||||
|
||||
if (userLocation) {
|
||||
const position = await getUserPosition().catch((error) => {
|
||||
toast.error(error.message);
|
||||
return null;
|
||||
});
|
||||
|
||||
if (position) {
|
||||
await updateUserInfo(localStorage.token, { location: position });
|
||||
toast.success('User location successfully retrieved.');
|
||||
} else {
|
||||
userLocation = false;
|
||||
}
|
||||
}
|
||||
|
||||
saveSettings({ userLocation });
|
||||
};
|
||||
|
||||
const toggleTitleAutoGenerate = async () => {
|
||||
titleAutoGenerate = !titleAutoGenerate;
|
||||
saveSettings({
|
||||
|
|
@ -106,6 +129,7 @@
|
|||
widescreenMode = $settings.widescreenMode ?? false;
|
||||
splitLargeChunks = $settings.splitLargeChunks ?? false;
|
||||
chatDirection = $settings.chatDirection ?? 'LTR';
|
||||
userLocation = $settings.userLocation ?? false;
|
||||
|
||||
defaultModelId = ($settings?.models ?? ['']).at(0);
|
||||
});
|
||||
|
|
@ -142,6 +166,26 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class=" py-0.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Widescreen Mode')}</div>
|
||||
|
||||
<button
|
||||
class="p-1 px-3 text-xs flex rounded transition"
|
||||
on:click={() => {
|
||||
togglewidescreenMode();
|
||||
}}
|
||||
type="button"
|
||||
>
|
||||
{#if widescreenMode === true}
|
||||
<span class="ml-2 self-center">{$i18n.t('On')}</span>
|
||||
{:else}
|
||||
<span class="ml-2 self-center">{$i18n.t('Off')}</span>
|
||||
{/if}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class=" py-0.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Title Auto-Generation')}</div>
|
||||
|
|
@ -186,16 +230,16 @@
|
|||
|
||||
<div>
|
||||
<div class=" py-0.5 flex w-full justify-between">
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Widescreen Mode')}</div>
|
||||
<div class=" self-center text-xs font-medium">{$i18n.t('Allow User Location')}</div>
|
||||
|
||||
<button
|
||||
class="p-1 px-3 text-xs flex rounded transition"
|
||||
on:click={() => {
|
||||
togglewidescreenMode();
|
||||
toggleUserLocation();
|
||||
}}
|
||||
type="button"
|
||||
>
|
||||
{#if widescreenMode === true}
|
||||
{#if userLocation === true}
|
||||
<span class="ml-2 self-center">{$i18n.t('On')}</span>
|
||||
{:else}
|
||||
<span class="ml-2 self-center">{$i18n.t('Off')}</span>
|
||||
|
|
|
|||
|
|
@ -120,18 +120,31 @@
|
|||
}
|
||||
};
|
||||
|
||||
document.addEventListener('keydown', onKeyDown);
|
||||
document.addEventListener('keyup', onKeyUp);
|
||||
const onFocus = () => {};
|
||||
|
||||
const onBlur = () => {
|
||||
shiftKey = false;
|
||||
selectedChatId = null;
|
||||
};
|
||||
|
||||
window.addEventListener('keydown', onKeyDown);
|
||||
window.addEventListener('keyup', onKeyUp);
|
||||
|
||||
window.addEventListener('touchstart', onTouchStart);
|
||||
window.addEventListener('touchend', onTouchEnd);
|
||||
|
||||
window.addEventListener('focus', onFocus);
|
||||
window.addEventListener('blur', onBlur);
|
||||
|
||||
return () => {
|
||||
window.removeEventListener('keydown', onKeyDown);
|
||||
window.removeEventListener('keyup', onKeyUp);
|
||||
|
||||
window.removeEventListener('touchstart', onTouchStart);
|
||||
window.removeEventListener('touchend', onTouchEnd);
|
||||
|
||||
window.removeEventListener('focus', onFocus);
|
||||
window.removeEventListener('blur', onBlur);
|
||||
};
|
||||
});
|
||||
|
||||
|
|
@ -464,9 +477,16 @@
|
|||
on:select={() => {
|
||||
selectedChatId = chat.id;
|
||||
}}
|
||||
on:delete={() => {
|
||||
deleteChat = chat;
|
||||
showDeleteConfirm = true;
|
||||
on:unselect={() => {
|
||||
selectedChatId = null;
|
||||
}}
|
||||
on:delete={(e) => {
|
||||
if ((e?.detail ?? '') === 'shift') {
|
||||
deleteChatHandler(chat.id);
|
||||
} else {
|
||||
deleteChat = chat;
|
||||
showDeleteConfirm = true;
|
||||
}
|
||||
}}
|
||||
/>
|
||||
{/each}
|
||||
|
|
|
|||
|
|
@ -201,7 +201,7 @@
|
|||
<button
|
||||
class=" self-center dark:hover:text-white transition"
|
||||
on:click={() => {
|
||||
deleteChat(chat.id);
|
||||
dispatch('delete', 'shift');
|
||||
}}
|
||||
type="button"
|
||||
>
|
||||
|
|
@ -231,7 +231,7 @@
|
|||
dispatch('delete');
|
||||
}}
|
||||
onClose={() => {
|
||||
selected = false;
|
||||
dispatch('unselect');
|
||||
}}
|
||||
>
|
||||
<button
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "يسمح",
|
||||
"Allow Chat Deletion": "يستطيع حذف المحادثات",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "الأحرف الأبجدية الرقمية والواصلات",
|
||||
"Already have an account?": "هل تملك حساب ؟",
|
||||
"an assistant": "مساعد",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "e.g. '30s','10m'. الوحدات الزمنية الصالحة هي 's', 'm', 'h'.",
|
||||
"Edit": "تعديل",
|
||||
"Edit Doc": "تعديل الملف",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "تعديل المستخدم",
|
||||
"Email": "البريد",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "اللغة",
|
||||
"Last Active": "آخر نشاط",
|
||||
"Last Modified": "",
|
||||
"Light": "فاتح",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "يمكن أن تصدر بعض الأخطاء. لذلك يجب التحقق من المعلومات المهمة",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "تم تحميل النموذج '{{modelName}}' بنجاح",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "النموذج '{{modelTag}}' موجود بالفعل في قائمة الانتظار للتحميل",
|
||||
"Model {{modelId}} not found": "لم يتم العثور على النموذج {{modelId}}.",
|
||||
|
|
@ -495,6 +499,7 @@
|
|||
"System": "النظام",
|
||||
"System Prompt": "محادثة النظام",
|
||||
"Tags": "الوسوم",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "أخبرنا المزيد:",
|
||||
"Temperature": "درجة حرارة",
|
||||
|
|
@ -538,8 +543,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "اكتب عنوان URL لحل مشكلة الوجه (تنزيل).",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "{{provider}}خطاء أوه! حدثت مشكلة في الاتصال بـ ",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "نوع ملف غير معروف '{{file_type}}', ولكن القبول والتعامل كنص عادي ",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "تحديث ونسخ الرابط",
|
||||
"Update password": "تحديث كلمة المرور",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "GGUF رفع موديل نوع",
|
||||
"Upload Files": "تحميل الملفات",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "Позволи",
|
||||
"Allow Chat Deletion": "Позволи Изтриване на Чат",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "алфанумерични знаци и тире",
|
||||
"Already have an account?": "Вече имате акаунт? ",
|
||||
"an assistant": "асистент",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "напр. '30с','10м'. Валидни единици са 'с', 'м', 'ч'.",
|
||||
"Edit": "Редактиране",
|
||||
"Edit Doc": "Редактиране на документ",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Редактиране на потребител",
|
||||
"Email": "Имейл",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "Език",
|
||||
"Last Active": "Последни активни",
|
||||
"Last Modified": "",
|
||||
"Light": "Светъл",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "LLMs могат да правят грешки. Проверете важните данни.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "Моделът '{{modelName}}' беше успешно свален.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "Моделът '{{modelTag}}' е вече в очакване за сваляне.",
|
||||
"Model {{modelId}} not found": "Моделът {{modelId}} не е намерен",
|
||||
|
|
@ -491,6 +495,7 @@
|
|||
"System": "Система",
|
||||
"System Prompt": "Системен Промпт",
|
||||
"Tags": "Тагове",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "Повече информация:",
|
||||
"Temperature": "Температура",
|
||||
|
|
@ -534,8 +539,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Въведете Hugging Face Resolve (Download) URL",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "О, не! Възникна проблем при свързването с {{provider}}.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Непознат файлов тип '{{file_type}}', но се приема и обработва като текст",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "Обнови и копирай връзка",
|
||||
"Update password": "Обновяване на парола",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "Качване на GGUF модел",
|
||||
"Upload Files": "Качване на файлове",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "অনুমোদন",
|
||||
"Allow Chat Deletion": "চ্যাট ডিলিট করতে দিন",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "ইংরেজি অক্ষর, সংখ্যা এবং হাইফেন",
|
||||
"Already have an account?": "আগে থেকেই একাউন্ট আছে?",
|
||||
"an assistant": "একটা এসিস্ট্যান্ট",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "যেমন '30s','10m'. সময়ের অনুমোদিত অনুমোদিত এককগুলি হচ্ছে 's', 'm', 'h'.",
|
||||
"Edit": "এডিট করুন",
|
||||
"Edit Doc": "ডকুমেন্ট এডিট করুন",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "ইউজার এডিট করুন",
|
||||
"Email": "ইমেইল",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "ভাষা",
|
||||
"Last Active": "সর্বশেষ সক্রিয়",
|
||||
"Last Modified": "",
|
||||
"Light": "লাইট",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "LLM ভুল করতে পারে। গুরুত্বপূর্ণ তথ্য যাচাই করে নিন।",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "'{{modelName}}' মডেল সফলভাবে ডাউনলোড হয়েছে।",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "{{modelTag}} ডাউনলোডের জন্য আগে থেকেই অপেক্ষমান আছে।",
|
||||
"Model {{modelId}} not found": "{{modelId}} মডেল পাওয়া যায়নি",
|
||||
|
|
@ -491,6 +495,7 @@
|
|||
"System": "সিস্টেম",
|
||||
"System Prompt": "সিস্টেম প্রম্পট",
|
||||
"Tags": "ট্যাগসমূহ",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "আরও বলুন:",
|
||||
"Temperature": "তাপমাত্রা",
|
||||
|
|
@ -534,8 +539,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Hugging Face থেকে ডাউনলোড করার ইউআরএল টাইপ করুন",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "ওহ-হো! {{provider}} এর সাথে কানেকশনে সমস্যা হয়েছে।",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "অপরিচিত ফাইল ফরম্যাট '{{file_type}}', তবে প্লেইন টেক্সট হিসেবে গ্রহণ করা হলো",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "আপডেট এবং লিংক কপি করুন",
|
||||
"Update password": "পাসওয়ার্ড আপডেট করুন",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "একটি GGUF মডেল আপলোড করুন",
|
||||
"Upload Files": "ফাইল আপলোড করুন",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "Permet",
|
||||
"Allow Chat Deletion": "Permet la Supressió del Xat",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "caràcters alfanumèrics i guions",
|
||||
"Already have an account?": "Ja tens un compte?",
|
||||
"an assistant": "un assistent",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p. ex. '30s','10m'. Les unitats de temps vàlides són 's', 'm', 'h'.",
|
||||
"Edit": "Editar",
|
||||
"Edit Doc": "Edita Document",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Edita Usuari",
|
||||
"Email": "Correu electrònic",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "Idioma",
|
||||
"Last Active": "Últim Actiu",
|
||||
"Last Modified": "",
|
||||
"Light": "Clar",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "Els LLMs poden cometre errors. Verifica la informació important.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Tau de Mirostat",
|
||||
"MMMM DD, YYYY": "DD de MMMM, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "DD de MMMM, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "El model '{{modelName}}' s'ha descarregat amb èxit.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "El model '{{modelTag}}' ja està en cua per ser descarregat.",
|
||||
"Model {{modelId}} not found": "Model {{modelId}} no trobat",
|
||||
|
|
@ -492,6 +496,7 @@
|
|||
"System": "Sistema",
|
||||
"System Prompt": "Prompt del Sistema",
|
||||
"Tags": "Etiquetes",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "Dóna'ns més informació:",
|
||||
"Temperature": "Temperatura",
|
||||
|
|
@ -535,8 +540,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Escriu URL de Resolució (Descàrrega) de Hugging Face",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "Uf! Hi va haver un problema connectant-se a {{provider}}.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tipus d'Arxiu Desconegut '{{file_type}}', però acceptant i tractant com a text pla",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "Actualitza i Copia enllaç",
|
||||
"Update password": "Actualitza contrasenya",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "Puja un model GGUF",
|
||||
"Upload Files": "Pujar fitxers",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "Sa pagtugot",
|
||||
"Allow Chat Deletion": "Tugoti nga mapapas ang mga chat",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "alphanumeric nga mga karakter ug hyphen",
|
||||
"Already have an account?": "Naa na kay account ?",
|
||||
"an assistant": "usa ka katabang",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p. ",
|
||||
"Edit": "",
|
||||
"Edit Doc": "I-edit ang dokumento",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "I-edit ang tiggamit",
|
||||
"Email": "E-mail",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "Pinulongan",
|
||||
"Last Active": "",
|
||||
"Last Modified": "",
|
||||
"Light": "Kahayag",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "Ang mga LLM mahimong masayop. ",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "Ang modelo'{{modelName}}' malampuson nga na-download.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "Ang modelo'{{modelTag}}' naa na sa pila para ma-download.",
|
||||
"Model {{modelId}} not found": "Modelo {{modelId}} wala makit-an",
|
||||
|
|
@ -491,6 +495,7 @@
|
|||
"System": "Sistema",
|
||||
"System Prompt": "Madasig nga Sistema",
|
||||
"Tags": "Mga tag",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "",
|
||||
"Temperature": "Temperatura",
|
||||
|
|
@ -534,8 +539,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Pagsulod sa resolusyon (pag-download) URL Hugging Face",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! {{provider}}.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Wala mailhi nga tipo sa file '{{file_type}}', apan gidawat ug gitratar ingon yano nga teksto",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "",
|
||||
"Update password": "I-update ang password",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "Pag-upload ug modelo sa GGUF",
|
||||
"Upload Files": "",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "Erlauben",
|
||||
"Allow Chat Deletion": "Chat Löschung erlauben",
|
||||
"Allow non-local voices": "Nicht-lokale Stimmen erlauben",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "alphanumerische Zeichen und Bindestriche",
|
||||
"Already have an account?": "Hast du vielleicht schon ein Account?",
|
||||
"an assistant": "ein Assistent",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "z.B. '30s','10m'. Gültige Zeiteinheiten sind 's', 'm', 'h'.",
|
||||
"Edit": "Bearbeiten",
|
||||
"Edit Doc": "Dokument bearbeiten",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Benutzer bearbeiten",
|
||||
"Email": "E-Mail",
|
||||
"Embedding Batch Size": "Embedding Batch Größe",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "Sprache",
|
||||
"Last Active": "Zuletzt aktiv",
|
||||
"Last Modified": "",
|
||||
"Light": "Hell",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "LLMs können Fehler machen. Überprüfe wichtige Informationen.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "DD MMMM YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "DD MMMM YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "Modell '{{modelName}}' wurde erfolgreich heruntergeladen.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "Modell '{{modelTag}}' befindet sich bereits in der Warteschlange zum Herunterladen.",
|
||||
"Model {{modelId}} not found": "Modell {{modelId}} nicht gefunden",
|
||||
|
|
@ -491,6 +495,7 @@
|
|||
"System": "System",
|
||||
"System Prompt": "System-Prompt",
|
||||
"Tags": "Tags",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "Erzähl uns mehr",
|
||||
"Temperature": "Temperatur",
|
||||
|
|
@ -534,8 +539,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Gib die Hugging Face Resolve (Download) URL ein",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "Ups! Es gab ein Problem bei der Verbindung mit {{provider}}.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Unbekannter Dateityp '{{file_type}}', wird jedoch akzeptiert und als einfacher Text behandelt.",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "Erneuern und kopieren",
|
||||
"Update password": "Passwort aktualisieren",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "GGUF Model hochladen",
|
||||
"Upload Files": "Dateien hochladen",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "Allow",
|
||||
"Allow Chat Deletion": "Allow Delete Chats",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "so alpha, many hyphen",
|
||||
"Already have an account?": "Such account exists?",
|
||||
"an assistant": "such assistant",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "e.g. '30s','10m'. Much time units are 's', 'm', 'h'.",
|
||||
"Edit": "",
|
||||
"Edit Doc": "Edit Doge",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Edit Wowser",
|
||||
"Email": "Email",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "Doge Speak",
|
||||
"Last Active": "",
|
||||
"Last Modified": "",
|
||||
"Light": "Light",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "LLMs can make borks. Verify important info.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "Model '{{modelName}}' has been successfully downloaded.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "Model '{{modelTag}}' is already in queue for downloading.",
|
||||
"Model {{modelId}} not found": "Model {{modelId}} not found",
|
||||
|
|
@ -491,6 +495,7 @@
|
|||
"System": "System very system",
|
||||
"System Prompt": "System Prompt much prompt",
|
||||
"Tags": "Tags very tags",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "",
|
||||
"Temperature": "Temperature very temp",
|
||||
|
|
@ -534,8 +539,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Type Hugging Face Resolve (Download) URL much download",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! There was an issue connecting to {{provider}}. Much uh-oh!",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Unknown File Type '{{file_type}}', but accepting and treating as plain text very unknown",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "",
|
||||
"Update password": "Update password much change",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "Upload a GGUF model very upload",
|
||||
"Upload Files": "",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "",
|
||||
"Allow Chat Deletion": "",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "",
|
||||
"Already have an account?": "",
|
||||
"an assistant": "",
|
||||
|
|
@ -309,6 +310,7 @@
|
|||
"Mirostat Tau": "",
|
||||
"MMMM DD, YYYY": "",
|
||||
"MMMM DD, YYYY HH:mm": "",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "",
|
||||
"Model {{modelId}} not found": "",
|
||||
|
|
@ -493,6 +495,7 @@
|
|||
"System": "",
|
||||
"System Prompt": "",
|
||||
"Tags": "",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "",
|
||||
"Temperature": "",
|
||||
|
|
@ -536,8 +539,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "",
|
||||
"Update password": "",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "",
|
||||
"Upload Files": "",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "",
|
||||
"Allow Chat Deletion": "",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "",
|
||||
"Already have an account?": "",
|
||||
"an assistant": "",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "",
|
||||
"Edit": "",
|
||||
"Edit Doc": "",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "",
|
||||
"Email": "",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "",
|
||||
"Last Active": "",
|
||||
"Last Modified": "",
|
||||
"Light": "",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "",
|
||||
"MMMM DD, YYYY": "",
|
||||
"MMMM DD, YYYY HH:mm": "",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "",
|
||||
"Model {{modelId}} not found": "",
|
||||
|
|
@ -491,6 +495,7 @@
|
|||
"System": "",
|
||||
"System Prompt": "",
|
||||
"Tags": "",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "",
|
||||
"Temperature": "",
|
||||
|
|
@ -534,8 +539,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "",
|
||||
"Update password": "",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "",
|
||||
"Upload Files": "",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "Permitir",
|
||||
"Allow Chat Deletion": "Permitir Borrar Chats",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "caracteres alfanuméricos y guiones",
|
||||
"Already have an account?": "¿Ya tienes una cuenta?",
|
||||
"an assistant": "un asistente",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p.ej. '30s','10m'. Unidades válidas de tiempo son 's', 'm', 'h'.",
|
||||
"Edit": "Editar",
|
||||
"Edit Doc": "Editar Documento",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Editar Usuario",
|
||||
"Email": "Email",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "Lenguaje",
|
||||
"Last Active": "Última Actividad",
|
||||
"Last Modified": "",
|
||||
"Light": "Claro",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "Los LLM pueden cometer errores. Verifica la información importante.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "El modelo '{{modelName}}' se ha descargado correctamente.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "El modelo '{{modelTag}}' ya está en cola para descargar.",
|
||||
"Model {{modelId}} not found": "El modelo {{modelId}} no fue encontrado",
|
||||
|
|
@ -492,6 +496,7 @@
|
|||
"System": "Sistema",
|
||||
"System Prompt": "Prompt del sistema",
|
||||
"Tags": "Etiquetas",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "Dinos más:",
|
||||
"Temperature": "Temperatura",
|
||||
|
|
@ -535,8 +540,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Escriba la URL (Descarga) de Hugging Face Resolve",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "¡Uh oh! Hubo un problema al conectarse a {{provider}}.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tipo de archivo desconocido '{{file_type}}', pero se acepta y se trata como texto sin formato",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "Actualizar y copiar enlace",
|
||||
"Update password": "Actualizar contraseña",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "Subir un modelo GGUF",
|
||||
"Upload Files": "Subir archivos",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "اجازه دادن",
|
||||
"Allow Chat Deletion": "اجازه حذف گپ",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "حروف الفبایی و خط فاصله",
|
||||
"Already have an account?": "از قبل حساب کاربری دارید؟",
|
||||
"an assistant": "یک دستیار",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "به طور مثال '30s','10m'. واحد\u200cهای زمانی معتبر 's', 'm', 'h' هستند.",
|
||||
"Edit": "ویرایش",
|
||||
"Edit Doc": "ویرایش سند",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "ویرایش کاربر",
|
||||
"Email": "ایمیل",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "زبان",
|
||||
"Last Active": "آخرین فعال",
|
||||
"Last Modified": "",
|
||||
"Light": "روشن",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "مدل\u200cهای زبانی بزرگ می\u200cتوانند اشتباه کنند. اطلاعات مهم را راستی\u200cآزمایی کنید.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "مدل '{{modelName}}' با موفقیت دانلود شد.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "مدل '{{modelTag}}' در حال حاضر در صف برای دانلود است.",
|
||||
"Model {{modelId}} not found": "مدل {{modelId}} یافت نشد",
|
||||
|
|
@ -491,6 +495,7 @@
|
|||
"System": "سیستم",
|
||||
"System Prompt": "پرامپت سیستم",
|
||||
"Tags": "تگ\u200cها",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "بیشتر بگویید:",
|
||||
"Temperature": "دما",
|
||||
|
|
@ -534,8 +539,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "مقدار URL دانلود (Resolve) Hugging Face را وارد کنید",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "اوه اوه! مشکلی در اتصال به {{provider}} وجود داشت.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "نوع فایل '{{file_type}}' ناشناخته است، به عنوان یک فایل متنی ساده با آن برخورد می شود.",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "به روزرسانی و کپی لینک",
|
||||
"Update password": "به روزرسانی رمزعبور",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "آپلود یک مدل GGUF",
|
||||
"Upload Files": "بارگذاری پروندهها",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "Salli",
|
||||
"Allow Chat Deletion": "Salli keskustelujen poisto",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "kirjaimia, numeroita ja väliviivoja",
|
||||
"Already have an account?": "Onko sinulla jo tili?",
|
||||
"an assistant": "avustaja",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "esim. '30s', '10m'. Kelpoiset aikayksiköt ovat 's', 'm', 'h'.",
|
||||
"Edit": "Muokkaa",
|
||||
"Edit Doc": "Muokkaa asiakirjaa",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Muokkaa käyttäjää",
|
||||
"Email": "Sähköposti",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "Kieli",
|
||||
"Last Active": "Viimeksi aktiivinen",
|
||||
"Last Modified": "",
|
||||
"Light": "Vaalea",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "Kielimallit voivat tehdä virheitä. Varmista tärkeät tiedot.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "DD MMMM YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "DD MMMM YYYY, HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "Malli '{{modelName}}' ladattiin onnistuneesti.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "Malli '{{modelTag}}' on jo jonossa ladattavaksi.",
|
||||
"Model {{modelId}} not found": "Mallia {{modelId}} ei löytynyt",
|
||||
|
|
@ -491,6 +495,7 @@
|
|||
"System": "Järjestelmä",
|
||||
"System Prompt": "Järjestelmäkehote",
|
||||
"Tags": "Tagit",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "Kerro lisää:",
|
||||
"Temperature": "Lämpötila",
|
||||
|
|
@ -534,8 +539,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Kirjoita Hugging Face -resolve-osoite",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "Voi ei! Yhteysongelma {{provider}}:n kanssa.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tuntematon tiedostotyyppi '{{file_type}}', mutta hyväksytään ja käsitellään pelkkänä tekstinä",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "Päivitä ja kopioi linkki",
|
||||
"Update password": "Päivitä salasana",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "Lataa GGUF-malli",
|
||||
"Upload Files": "Lataa tiedostoja",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "Autoriser",
|
||||
"Allow Chat Deletion": "Autoriser la suppression des discussions",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "caractères alphanumériques et tirets",
|
||||
"Already have an account?": "Vous avez déjà un compte ?",
|
||||
"an assistant": "un assistant",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "p. ex. '30s', '10m'. Les unités de temps valides sont 's', 'm', 'h'.",
|
||||
"Edit": "Éditer",
|
||||
"Edit Doc": "Éditer le document",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Éditer l'utilisateur",
|
||||
"Email": "Email",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "Langue",
|
||||
"Last Active": "Dernière activité",
|
||||
"Last Modified": "",
|
||||
"Light": "Lumière",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "Les LLMs peuvent faire des erreurs. Vérifiez les informations importantes.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "Le modèle '{{modelName}}' a été téléchargé avec succès.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "Le modèle '{{modelTag}}' est déjà dans la file d'attente pour le téléchargement.",
|
||||
"Model {{modelId}} not found": "Modèle {{modelId}} non trouvé",
|
||||
|
|
@ -492,6 +496,7 @@
|
|||
"System": "Système",
|
||||
"System Prompt": "Prompt Système",
|
||||
"Tags": "Tags",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "Donnez-nous plus:",
|
||||
"Temperature": "Température",
|
||||
|
|
@ -535,8 +540,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Entrez l'URL de résolution (téléchargement) Hugging Face",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh ! Il y a eu un problème de connexion à {{provider}}.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Type de fichier inconnu '{{file_type}}', mais accepté et traité comme du texte brut",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "Mettre à jour et copier le lien",
|
||||
"Update password": "Mettre à jour le mot de passe",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "Téléverser un modèle GGUF",
|
||||
"Upload Files": "Téléverser des fichiers",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "Autoriser",
|
||||
"Allow Chat Deletion": "Autoriser la suppression du chat",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "caractères alphanumériques et tirets",
|
||||
"Already have an account?": "Vous avez déjà un compte ?",
|
||||
"an assistant": "un assistant",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "par ex. '30s', '10m'. Les unités de temps valides sont 's', 'm', 'h'.",
|
||||
"Edit": "Éditer",
|
||||
"Edit Doc": "Éditer le document",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Éditer l'utilisateur",
|
||||
"Email": "Email",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "Langue",
|
||||
"Last Active": "Dernier Activité",
|
||||
"Last Modified": "",
|
||||
"Light": "Clair",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "Les LLMs peuvent faire des erreurs. Vérifiez les informations importantes.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "Le modèle '{{modelName}}' a été téléchargé avec succès.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "Le modèle '{{modelTag}}' est déjà dans la file d'attente pour le téléchargement.",
|
||||
"Model {{modelId}} not found": "Modèle {{modelId}} non trouvé",
|
||||
|
|
@ -492,6 +496,7 @@
|
|||
"System": "Système",
|
||||
"System Prompt": "Prompt du Système",
|
||||
"Tags": "Tags",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "Dites-nous en plus :",
|
||||
"Temperature": "Température",
|
||||
|
|
@ -535,8 +540,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Entrez l'URL de Résolution (Téléchargement) Hugging Face",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh ! Il y a eu un problème de connexion à {{provider}}.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Type de Fichier Inconnu '{{file_type}}', mais accepté et traité comme du texte brut",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "Mettre à Jour et Copier le Lien",
|
||||
"Update password": "Mettre à Jour le Mot de Passe",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "Téléverser un modèle GGUF",
|
||||
"Upload Files": "Téléverser des fichiers",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "אפשר",
|
||||
"Allow Chat Deletion": "אפשר מחיקת צ'אט",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "תווים אלפאנומריים ומקפים",
|
||||
"Already have an account?": "כבר יש לך חשבון?",
|
||||
"an assistant": "עוזר",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "למשל '30s', '10m'. יחידות זמן חוקיות הן 's', 'm', 'h'.",
|
||||
"Edit": "ערוך",
|
||||
"Edit Doc": "ערוך מסמך",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "ערוך משתמש",
|
||||
"Email": "דוא\"ל",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "שפה",
|
||||
"Last Active": "פעיל לאחרונה",
|
||||
"Last Modified": "",
|
||||
"Light": "בהיר",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "מודלים בשפה טבעית יכולים לטעות. אמת מידע חשוב.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "DD בMMMM, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "DD בMMMM, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "המודל '{{modelName}}' הורד בהצלחה.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "המודל '{{modelTag}}' כבר בתור להורדה.",
|
||||
"Model {{modelId}} not found": "המודל {{modelId}} לא נמצא",
|
||||
|
|
@ -492,6 +496,7 @@
|
|||
"System": "מערכת",
|
||||
"System Prompt": "תגובת מערכת",
|
||||
"Tags": "תגיות",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "תרשמו יותר:",
|
||||
"Temperature": "טמפרטורה",
|
||||
|
|
@ -535,8 +540,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "הקלד כתובת URL של פתרון פנים מחבק (הורד)",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "או-הו! אירעה בעיה בהתחברות ל- {{provider}}.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "סוג קובץ לא ידוע '{{file_type}}', אך מקבל ומתייחס אליו כטקסט רגיל",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "עדכן ושכפל קישור",
|
||||
"Update password": "עדכן סיסמה",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "העלה מודל GGUF",
|
||||
"Upload Files": "העלאת קבצים",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "अनुमति दें",
|
||||
"Allow Chat Deletion": "चैट हटाने की अनुमति दें",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "अल्फ़ान्यूमेरिक वर्ण और हाइफ़न",
|
||||
"Already have an account?": "क्या आपके पास पहले से एक खाता मौजूद है?",
|
||||
"an assistant": "एक सहायक",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "जैसे '30s', '10m', मान्य समय इकाइयाँ 's', 'm', 'h' हैं।",
|
||||
"Edit": "संपादित करें",
|
||||
"Edit Doc": "दस्तावेज़ संपादित करें",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "यूजर को संपादित करो",
|
||||
"Email": "ईमेल",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "भाषा",
|
||||
"Last Active": "पिछली बार सक्रिय",
|
||||
"Last Modified": "",
|
||||
"Light": "सुन",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "एलएलएम गलतियाँ कर सकते हैं। महत्वपूर्ण जानकारी सत्यापित करें.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "मिरोस्तात ताऊ",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "मॉडल '{{modelName}}' सफलतापूर्वक डाउनलोड हो गया है।",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "मॉडल '{{modelTag}}' पहले से ही डाउनलोड करने के लिए कतार में है।",
|
||||
"Model {{modelId}} not found": "मॉडल {{modelId}} नहीं मिला",
|
||||
|
|
@ -491,6 +495,7 @@
|
|||
"System": "सिस्टम",
|
||||
"System Prompt": "सिस्टम प्रॉम्प्ट",
|
||||
"Tags": "टैग",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "हमें और अधिक बताएँ:",
|
||||
"Temperature": "टेंपेरेचर",
|
||||
|
|
@ -534,8 +539,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "हगिंग फेस रिज़ॉल्व (डाउनलोड) यूआरएल टाइप करें",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "उह ओह! {{provider}} से कनेक्ट करने में एक समस्या थी।",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "अज्ञात फ़ाइल प्रकार '{{file_type}}', लेकिन स्वीकार करना और सादे पाठ के रूप में व्यवहार करना",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "अपडेट करें और लिंक कॉपी करें",
|
||||
"Update password": "पासवर्ड अपडेट करें",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "GGUF मॉडल अपलोड करें",
|
||||
"Upload Files": "फ़ाइलें अपलोड करें",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "Dopusti",
|
||||
"Allow Chat Deletion": "Dopusti brisanje razgovora",
|
||||
"Allow non-local voices": "Dopusti nelokalne glasove",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "alfanumerički znakovi i crtice",
|
||||
"Already have an account?": "Već imate račun?",
|
||||
"an assistant": "asistent",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "npr. '30s','10m'. Važeće vremenske jedinice su 's', 'm', 'h'.",
|
||||
"Edit": "Uredi",
|
||||
"Edit Doc": "Uredi dokument",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Uredi korisnika",
|
||||
"Email": "Email",
|
||||
"Embedding Batch Size": "Embedding - Veličina batch-a",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "Znanje",
|
||||
"Language": "Jezik",
|
||||
"Last Active": "Zadnja aktivnost",
|
||||
"Last Modified": "",
|
||||
"Light": "Svijetlo",
|
||||
"Listening...": "Slušam...",
|
||||
"LLMs can make mistakes. Verify important information.": "LLM-ovi mogu pogriješiti. Provjerite važne informacije.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "Model '{{modelName}}' je uspješno preuzet.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "Model '{{modelTag}}' je već u redu za preuzimanje.",
|
||||
"Model {{modelId}} not found": "Model {{modelId}} nije pronađen",
|
||||
|
|
@ -492,6 +496,7 @@
|
|||
"System": "Sustav",
|
||||
"System Prompt": "Sistemski prompt",
|
||||
"Tags": "Oznake",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "Recite nam više:",
|
||||
"Temperature": "Temperatura",
|
||||
|
|
@ -535,8 +540,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Upišite Hugging Face Resolve (Download) URL",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! Pojavio se problem s povezivanjem na {{provider}}.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Nepoznata vrsta datoteke '{{file_type}}', ali prihvaćena i obrađuje se kao običan tekst",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "Ažuriraj i kopiraj vezu",
|
||||
"Update password": "Ažuriraj lozinku",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "Učitaj GGUF model",
|
||||
"Upload Files": "Prijenos datoteka",
|
||||
"Upload Pipeline": "Prijenos kanala",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "Consenti",
|
||||
"Allow Chat Deletion": "Consenti l'eliminazione della chat",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "caratteri alfanumerici e trattini",
|
||||
"Already have an account?": "Hai già un account?",
|
||||
"an assistant": "un assistente",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "ad esempio '30s','10m'. Le unità di tempo valide sono 's', 'm', 'h'.",
|
||||
"Edit": "Modifica",
|
||||
"Edit Doc": "Modifica documento",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Modifica utente",
|
||||
"Email": "Email",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "Lingua",
|
||||
"Last Active": "Ultima attività",
|
||||
"Last Modified": "",
|
||||
"Light": "Chiaro",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "Gli LLM possono commettere errori. Verifica le informazioni importanti.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "Il modello '{{modelName}}' è stato scaricato con successo.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "Il modello '{{modelTag}}' è già in coda per il download.",
|
||||
"Model {{modelId}} not found": "Modello {{modelId}} non trovato",
|
||||
|
|
@ -492,6 +496,7 @@
|
|||
"System": "Sistema",
|
||||
"System Prompt": "Prompt di sistema",
|
||||
"Tags": "Tag",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "Raccontaci di più:",
|
||||
"Temperature": "Temperatura",
|
||||
|
|
@ -535,8 +540,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Digita l'URL di Hugging Face Resolve (Download)",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! Si è verificato un problema durante la connessione a {{provider}}.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tipo di file sconosciuto '{{file_type}}', ma accettato e trattato come testo normale",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "Aggiorna e copia link",
|
||||
"Update password": "Aggiorna password",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "Carica un modello GGUF",
|
||||
"Upload Files": "Carica file",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "許可",
|
||||
"Allow Chat Deletion": "チャットの削除を許可",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "英数字とハイフン",
|
||||
"Already have an account?": "すでにアカウントをお持ちですか?",
|
||||
"an assistant": "アシスタント",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "例: '30秒'、'10分'。有効な時間単位は '秒'、'分'、'時間' です。",
|
||||
"Edit": "編集",
|
||||
"Edit Doc": "ドキュメントを編集",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "ユーザーを編集",
|
||||
"Email": "メールアドレス",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "言語",
|
||||
"Last Active": "最終アクティブ",
|
||||
"Last Modified": "",
|
||||
"Light": "ライト",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "LLM は間違いを犯す可能性があります。重要な情報を検証してください。",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "ミロスタット Tau",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "モデル '{{modelName}}' が正常にダウンロードされました。",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "モデル '{{modelTag}}' はすでにダウンロード待ち行列に入っています。",
|
||||
"Model {{modelId}} not found": "モデル {{modelId}} が見つかりません",
|
||||
|
|
@ -490,6 +494,7 @@
|
|||
"System": "システム",
|
||||
"System Prompt": "システムプロンプト",
|
||||
"Tags": "タグ",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "もっと話してください:",
|
||||
"Temperature": "温度",
|
||||
|
|
@ -533,8 +538,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Hugging Face Resolve (ダウンロード) URL を入力してください",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "おっと! {{provider}} への接続に問題が発生しました。",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "不明なファイルタイプ '{{file_type}}' ですが、プレーンテキストとして受け入れて処理します",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "リンクの更新とコピー",
|
||||
"Update password": "パスワードを更新",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "GGUF モデルをアップロード",
|
||||
"Upload Files": "ファイルのアップロード",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "ნების დართვა",
|
||||
"Allow Chat Deletion": "მიმოწერის წაშლის დაშვება",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "ალფანუმერული სიმბოლოები და დეფისები",
|
||||
"Already have an account?": "უკვე გაქვს ანგარიში?",
|
||||
"an assistant": "ასისტენტი",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "მაგალითად, '30წ', '10მ'. მოქმედი დროის ერთეულები: 'წ', 'წთ', 'სთ'.",
|
||||
"Edit": "რედაქტირება",
|
||||
"Edit Doc": "დოკუმენტის ედიტირება",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "მომხმარებლის ედიტირება",
|
||||
"Email": "ელ-ფოსტა",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "ენა",
|
||||
"Last Active": "ბოლო აქტიური",
|
||||
"Last Modified": "",
|
||||
"Light": "მსუბუქი",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "შესაძლოა LLM-ებმა შეცდომები დაუშვან. გადაამოწმეთ მნიშვნელოვანი ინფორმაცია.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "მიროსტატი ტაუ",
|
||||
"MMMM DD, YYYY": "თვე დღე, წელი",
|
||||
"MMMM DD, YYYY HH:mm": "თვე დღე, წელი HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "მოდელი „{{modelName}}“ წარმატებით ჩამოიტვირთა.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "მოდელი „{{modelTag}}“ უკვე ჩამოტვირთვის რიგშია.",
|
||||
"Model {{modelId}} not found": "მოდელი {{modelId}} ვერ მოიძებნა",
|
||||
|
|
@ -491,6 +495,7 @@
|
|||
"System": "სისტემა",
|
||||
"System Prompt": "სისტემური მოთხოვნა",
|
||||
"Tags": "ტეგები",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "ჩვენთან დავუკავშირდით",
|
||||
"Temperature": "ტემპერატურა",
|
||||
|
|
@ -534,8 +539,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "სცადე გადმოწერო Hugging Face Resolve URL",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "{{provider}}-თან დაკავშირების პრობლემა წარმოიშვა.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "უცნობი ფაილის ტიპი „{{file_type}}“, მაგრამ მიიღება და განიხილება როგორც მარტივი ტექსტი",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "განახლება და ბმულის კოპირება",
|
||||
"Update password": "პაროლის განახლება",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "GGUF მოდელის ატვირთვა",
|
||||
"Upload Files": "ატვირთეთ ფაილები",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "허용",
|
||||
"Allow Chat Deletion": "채팅 삭제 허용",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "영문자,숫자 및 하이픈",
|
||||
"Already have an account?": "이미 계정이 있으신가요?",
|
||||
"an assistant": "어시스턴트",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "예: '30s','10m'. 유효한 시간 단위는 's', 'm', 'h'입니다.",
|
||||
"Edit": "편집",
|
||||
"Edit Doc": "문서 편집",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "사용자 편집",
|
||||
"Email": "이메일",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "언어",
|
||||
"Last Active": "최근 활동",
|
||||
"Last Modified": "",
|
||||
"Light": "밝음",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "LLM은 실수를 할 수 있습니다. 중요한 정보를 확인하세요.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "모델 '{{modelName}}'이(가) 성공적으로 다운로드되었습니다.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "모델 '{{modelTag}}'이(가) 이미 다운로드 대기열에 있습니다.",
|
||||
"Model {{modelId}} not found": "모델 {{modelId}}를 찾을 수 없습니다.",
|
||||
|
|
@ -490,6 +494,7 @@
|
|||
"System": "시스템",
|
||||
"System Prompt": "시스템 프롬프트",
|
||||
"Tags": "Tags",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "더 알려주세요:",
|
||||
"Temperature": "Temperature",
|
||||
|
|
@ -533,8 +538,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Hugging Face Resolve (다운로드) URL 입력",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "앗! {{provider}}에 연결하는 데 문제가 있었습니다.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "알 수 없는 파일 유형 '{{file_type}}', 하지만 일반 텍스트로 허용하고 처리합니다.",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "링크 업데이트 및 복사",
|
||||
"Update password": "비밀번호 업데이트",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "GGUF 모델 업로드",
|
||||
"Upload Files": "파일 업로드",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "Leisti",
|
||||
"Allow Chat Deletion": "Leisti pokalbių ištrynimą",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "skaičiai, raidės ir brūkšneliai",
|
||||
"Already have an account?": "Ar jau turite paskyrą?",
|
||||
"an assistant": "assistentas",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "pvz. '30s', '10m'. Laiko vienetai yra 's', 'm', 'h'.",
|
||||
"Edit": "Redaguoti",
|
||||
"Edit Doc": "Redaguoti dokumentą",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Redaguoti naudotoją",
|
||||
"Email": "El. paštas",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "Kalba",
|
||||
"Last Active": "Paskutinį kartą aktyvus",
|
||||
"Last Modified": "",
|
||||
"Light": "Šviesus",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "Dideli kalbos modeliai gali klysti. Patikrinkite atsakymų teisingumą.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "'{{modelName}}' modelis sėkmingai atsisiųstas.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "Modelis '{{modelTag}}' jau atsisiuntimų eilėje.",
|
||||
"Model {{modelId}} not found": "Modelis {{modelId}} nerastas",
|
||||
|
|
@ -493,6 +497,7 @@
|
|||
"System": "Sistema",
|
||||
"System Prompt": "Sistemos užklausa",
|
||||
"Tags": "Žymos",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "Papasakokite daugiau",
|
||||
"Temperature": "Temperatūra",
|
||||
|
|
@ -536,8 +541,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Įveskite Hugging Face Resolve nuorodą",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "O ne! Prisijungiant prie {{provider}} kilo problema.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Nepažįstamas '{{file_type}}' failo formatas, tačiau jis priimtas ir bus apdorotas kaip grynas tekstas",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "Atnaujinti ir kopijuoti nuorodą",
|
||||
"Update password": "Atnaujinti slaptažodį",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "Parsisiųsti GGUF modelį",
|
||||
"Upload Files": "",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "Tillat",
|
||||
"Allow Chat Deletion": "Tillat sletting av chatter",
|
||||
"Allow non-local voices": "Tillat ikke-lokale stemmer",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "alfanumeriske tegn og bindestreker",
|
||||
"Already have an account?": "Har du allerede en konto?",
|
||||
"an assistant": "en assistent",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "f.eks. '30s','10m'. Gyldige tidsenheter er 's', 'm', 't'.",
|
||||
"Edit": "Rediger",
|
||||
"Edit Doc": "Rediger dokument",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Rediger bruker",
|
||||
"Email": "E-post",
|
||||
"Embedding Batch Size": "Batch-størrelse for embedding",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "Språk",
|
||||
"Last Active": "Sist aktiv",
|
||||
"Last Modified": "",
|
||||
"Light": "Lys",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "LLM-er kan gjøre feil. Verifiser viktig informasjon.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "Modellen '{{modelName}}' er lastet ned.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "Modellen '{{modelTag}}' er allerede i nedlastingskøen.",
|
||||
"Model {{modelId}} not found": "Modellen {{modelId}} ble ikke funnet",
|
||||
|
|
@ -491,6 +495,7 @@
|
|||
"System": "System",
|
||||
"System Prompt": "Systemprompt",
|
||||
"Tags": "Tagger",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "Fortell oss mer:",
|
||||
"Temperature": "Temperatur",
|
||||
|
|
@ -534,8 +539,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Skriv inn Hugging Face Resolve (nedlasting) URL",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "Oops! Det oppsto et problem med tilkoblingen til {{provider}}.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Ukjent filtype '{{file_type}}', men aksepteres og behandles som ren tekst",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "Oppdater og kopier lenke",
|
||||
"Update password": "Oppdater passord",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "Last opp en GGUF-modell",
|
||||
"Upload Files": "Last opp filer",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "Toestaan",
|
||||
"Allow Chat Deletion": "Sta Chat Verwijdering toe",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "alfanumerieke karakters en streepjes",
|
||||
"Already have an account?": "Heb je al een account?",
|
||||
"an assistant": "een assistent",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "bijv. '30s', '10m'. Geldige tijdseenheden zijn 's', 'm', 'h'.",
|
||||
"Edit": "Wijzig",
|
||||
"Edit Doc": "Wijzig Doc",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Wijzig Gebruiker",
|
||||
"Email": "Email",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "Taal",
|
||||
"Last Active": "Laatst Actief",
|
||||
"Last Modified": "",
|
||||
"Light": "Licht",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "LLMs kunnen fouten maken. Verifieer belangrijke informatie.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "Model '{{modelName}}' is succesvol gedownload.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "Model '{{modelTag}}' staat al in de wachtrij voor downloaden.",
|
||||
"Model {{modelId}} not found": "Model {{modelId}} niet gevonden",
|
||||
|
|
@ -491,6 +495,7 @@
|
|||
"System": "Systeem",
|
||||
"System Prompt": "Systeem Prompt",
|
||||
"Tags": "Tags",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "Vertel ons meer:",
|
||||
"Temperature": "Temperatuur",
|
||||
|
|
@ -534,8 +539,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Type Hugging Face Resolve (Download) URL",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! Er was een probleem met verbinden met {{provider}}.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Onbekend Bestandstype '{{file_type}}', maar accepteren en behandelen als platte tekst",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "Update en Kopieer Link",
|
||||
"Update password": "Wijzig wachtwoord",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "Upload een GGUF model",
|
||||
"Upload Files": "Bestanden uploaden",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "ਅਨੁਮਤੀ",
|
||||
"Allow Chat Deletion": "ਗੱਲਬਾਤ ਮਿਟਾਉਣ ਦੀ ਆਗਿਆ ਦਿਓ",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "ਅਲਫ਼ਾਨਯੂਮੈਰਿਕ ਅੱਖਰ ਅਤੇ ਹਾਈਫਨ",
|
||||
"Already have an account?": "ਪਹਿਲਾਂ ਹੀ ਖਾਤਾ ਹੈ?",
|
||||
"an assistant": "ਇੱਕ ਸਹਾਇਕ",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "ਉਦਾਹਰਣ ਲਈ '30ਸ','10ਮਿ'. ਸਹੀ ਸਮਾਂ ਇਕਾਈਆਂ ਹਨ 'ਸ', 'ਮ', 'ਘੰ'.",
|
||||
"Edit": "ਸੰਪਾਦਨ ਕਰੋ",
|
||||
"Edit Doc": "ਡਾਕੂਮੈਂਟ ਸੰਪਾਦਨ ਕਰੋ",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "ਉਪਭੋਗਤਾ ਸੰਪਾਦਨ ਕਰੋ",
|
||||
"Email": "ਈਮੇਲ",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "ਭਾਸ਼ਾ",
|
||||
"Last Active": "ਆਖਰੀ ਸਰਗਰਮ",
|
||||
"Last Modified": "",
|
||||
"Light": "ਹਲਕਾ",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "LLMs ਗਲਤੀਆਂ ਕਰ ਸਕਦੇ ਹਨ। ਮਹੱਤਵਪੂਰਨ ਜਾਣਕਾਰੀ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ।",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "ਮਿਰੋਸਟੈਟ ਟਾਉ",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "ਮਾਡਲ '{{modelName}}' ਸਫਲਤਾਪੂਰਵਕ ਡਾਊਨਲੋਡ ਕੀਤਾ ਗਿਆ ਹੈ।",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "ਮਾਡਲ '{{modelTag}}' ਪਹਿਲਾਂ ਹੀ ਡਾਊਨਲੋਡ ਲਈ ਕਤਾਰ ਵਿੱਚ ਹੈ।",
|
||||
"Model {{modelId}} not found": "ਮਾਡਲ {{modelId}} ਨਹੀਂ ਮਿਲਿਆ",
|
||||
|
|
@ -491,6 +495,7 @@
|
|||
"System": "ਸਿਸਟਮ",
|
||||
"System Prompt": "ਸਿਸਟਮ ਪ੍ਰੰਪਟ",
|
||||
"Tags": "ਟੈਗ",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "ਸਾਨੂੰ ਹੋਰ ਦੱਸੋ:",
|
||||
"Temperature": "ਤਾਪਮਾਨ",
|
||||
|
|
@ -534,8 +539,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Hugging Face Resolve (ਡਾਊਨਲੋਡ) URL ਟਾਈਪ ਕਰੋ",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "ਓਹੋ! {{provider}} ਨਾਲ ਕਨੈਕਟ ਕਰਨ ਵਿੱਚ ਸਮੱਸਿਆ ਆਈ।",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "ਅਣਜਾਣ ਫਾਈਲ ਕਿਸਮ '{{file_type}}', ਪਰ ਸਧਾਰਨ ਪਾਠ ਵਜੋਂ ਸਵੀਕਾਰ ਕਰਦੇ ਹੋਏ",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "ਅੱਪਡੇਟ ਕਰੋ ਅਤੇ ਲਿੰਕ ਕਾਪੀ ਕਰੋ",
|
||||
"Update password": "ਪਾਸਵਰਡ ਅੱਪਡੇਟ ਕਰੋ",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "ਇੱਕ GGUF ਮਾਡਲ ਅਪਲੋਡ ਕਰੋ",
|
||||
"Upload Files": "ਫਾਇਲਾਂ ਅੱਪਲੋਡ ਕਰੋ",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "Pozwól",
|
||||
"Allow Chat Deletion": "Pozwól na usuwanie czatu",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "znaki alfanumeryczne i myślniki",
|
||||
"Already have an account?": "Masz już konto?",
|
||||
"an assistant": "asystent",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "np. '30s', '10m'. Poprawne jednostki czasu to 's', 'm', 'h'.",
|
||||
"Edit": "Edytuj",
|
||||
"Edit Doc": "Edytuj dokument",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Edytuj użytkownika",
|
||||
"Email": "Email",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "Język",
|
||||
"Last Active": "Ostatnio aktywny",
|
||||
"Last Modified": "",
|
||||
"Light": "Jasny",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "LLMy mogą popełniać błędy. Zweryfikuj ważne informacje.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "Model '{{modelName}}' został pomyślnie pobrany.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "Model '{{modelTag}}' jest już w kolejce do pobrania.",
|
||||
"Model {{modelId}} not found": "Model {{modelId}} nie został znaleziony",
|
||||
|
|
@ -493,6 +497,7 @@
|
|||
"System": "System",
|
||||
"System Prompt": "Prompt systemowy",
|
||||
"Tags": "Tagi",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "Powiedz nam więcej",
|
||||
"Temperature": "Temperatura",
|
||||
|
|
@ -536,8 +541,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Wprowadź adres URL do pobrania z Hugging Face",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "O nie! Wystąpił problem z połączeniem z {{provider}}.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Nieznany typ pliku '{{file_type}}', ale akceptowany i traktowany jako zwykły tekst",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "Uaktualnij i skopiuj link",
|
||||
"Update password": "Aktualizacja hasła",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "Prześlij model GGUF",
|
||||
"Upload Files": "Prześlij pliki",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "Permitir",
|
||||
"Allow Chat Deletion": "Permitir Exclusão de Bate-papo",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "caracteres alfanuméricos e hífens",
|
||||
"Already have an account?": "Já tem uma conta?",
|
||||
"an assistant": "um assistente",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "por exemplo, '30s', '10m'. Unidades de tempo válidas são 's', 'm', 'h'.",
|
||||
"Edit": "Editar",
|
||||
"Edit Doc": "Editar Documento",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Editar Usuário",
|
||||
"Email": "E-mail",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "Idioma",
|
||||
"Last Active": "Último Ativo",
|
||||
"Last Modified": "",
|
||||
"Light": "Claro",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "LLMs podem cometer erros. Verifique informações importantes.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "DD/MM/YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "DD/MM/YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "O modelo '{{modelName}}' foi baixado com sucesso.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "O modelo '{{modelTag}}' já está na fila para download.",
|
||||
"Model {{modelId}} not found": "Modelo {{modelId}} não encontrado",
|
||||
|
|
@ -492,6 +496,7 @@
|
|||
"System": "Sistema",
|
||||
"System Prompt": "Prompt do Sistema",
|
||||
"Tags": "Tags",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "Dê-nos mais:",
|
||||
"Temperature": "Temperatura",
|
||||
|
|
@ -535,8 +540,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Digite a URL do Hugging Face Resolve (Download)",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "Opa! Houve um problema ao conectar-se a {{provider}}.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tipo de arquivo desconhecido '{{file_type}}', mas aceitando e tratando como texto simples",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "Atualizar e Copiar Link",
|
||||
"Update password": "Atualizar senha",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "Carregar um modelo GGUF",
|
||||
"Upload Files": "Carregar arquivos",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "Permitir",
|
||||
"Allow Chat Deletion": "Permitir Exclusão de Conversa",
|
||||
"Allow non-local voices": "Permitir vozes não locais",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "caracteres alfanuméricos e hífens",
|
||||
"Already have an account?": "Já tem uma conta?",
|
||||
"an assistant": "um assistente",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "por exemplo, '30s', '10m'. Unidades de tempo válidas são 's', 'm', 'h'.",
|
||||
"Edit": "Editar",
|
||||
"Edit Doc": "Editar Documento",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Editar Utilizador",
|
||||
"Email": "E-mail",
|
||||
"Embedding Batch Size": "Tamanho do Lote do Embedding",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "Conhecimento",
|
||||
"Language": "Idioma",
|
||||
"Last Active": "Último Ativo",
|
||||
"Last Modified": "",
|
||||
"Light": "Claro",
|
||||
"Listening...": "A escutar...",
|
||||
"LLMs can make mistakes. Verify important information.": "LLMs podem cometer erros. Verifique informações importantes.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "DD/MM/YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "DD/MM/YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "O modelo '{{modelName}}' foi descarregado com sucesso.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "O modelo '{{modelTag}}' já está na fila para descarregar.",
|
||||
"Model {{modelId}} not found": "Modelo {{modelId}} não foi encontrado",
|
||||
|
|
@ -492,6 +496,7 @@
|
|||
"System": "Sistema",
|
||||
"System Prompt": "Prompt do Sistema",
|
||||
"Tags": "Etiquetas",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "Diga-nos mais:",
|
||||
"Temperature": "Temperatura",
|
||||
|
|
@ -535,8 +540,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Escreva o URL do Hugging Face Resolve (Descarregar)",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "Uh-oh! Houve um problema ao conectar a {{provider}}.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Tipo de ficheiro desconhecido '{{file_type}}', mas aceitando e tratando como texto simples",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "Atualizar e Copiar Link",
|
||||
"Update password": "Atualizar senha",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "Carregar um modelo GGUF",
|
||||
"Upload Files": "Carregar ficheiros",
|
||||
"Upload Pipeline": "Carregar Pipeline",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "Разрешить",
|
||||
"Allow Chat Deletion": "Дозволять удаление чат",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "буквенно цифровые символы и дефисы",
|
||||
"Already have an account?": "у вас уже есть аккаунт?",
|
||||
"an assistant": "ассистент",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "например, '30с','10м'. Допустимые единицы времени: 'с', 'м', 'ч'.",
|
||||
"Edit": "Редактировать",
|
||||
"Edit Doc": "Редактировать документ",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Редактировать пользователя",
|
||||
"Email": "Электронная почта",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "Язык",
|
||||
"Last Active": "Последний активный",
|
||||
"Last Modified": "",
|
||||
"Light": "Светлый",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "LLMs могут допускать ошибки. Проверяйте важную информацию.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "DD MMMM YYYY г.",
|
||||
"MMMM DD, YYYY HH:mm": "DD MMMM YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "Модель '{{modelName}}' успешно загружена.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "Модель '{{modelTag}}' уже находится в очереди на загрузку.",
|
||||
"Model {{modelId}} not found": "Модель {{modelId}} не найдена",
|
||||
|
|
@ -493,6 +497,7 @@
|
|||
"System": "Система",
|
||||
"System Prompt": "Системный промпт",
|
||||
"Tags": "Теги",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "Пожалуйста, расскажите нам больше:",
|
||||
"Temperature": "Температура",
|
||||
|
|
@ -536,8 +541,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Введите URL-адрес Hugging Face Resolve (загрузки)",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "Упс! Возникла проблема подключения к {{provider}}.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Неизвестный тип файла '{{file_type}}', но принимается и обрабатывается как обычный текст",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "Обновить и скопировать ссылку",
|
||||
"Update password": "Обновить пароль",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "Загрузить модель GGUF",
|
||||
"Upload Files": "Загрузка файлов",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "Дозволи",
|
||||
"Allow Chat Deletion": "Дозволи брисање ћаскања",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "алфанумерички знакови и цртице",
|
||||
"Already have an account?": "Већ имате налог?",
|
||||
"an assistant": "помоћник",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "нпр. '30s', '10m'. Важеће временске јединице су 's', 'm', 'h'.",
|
||||
"Edit": "Уреди",
|
||||
"Edit Doc": "Уреди документ",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Уреди корисника",
|
||||
"Email": "Е-пошта",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "Језик",
|
||||
"Last Active": "Последња активност",
|
||||
"Last Modified": "",
|
||||
"Light": "Светла",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "ВЈМ-ови (LLM-ови) могу правити грешке. Проверите важне податке.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Миростат Тау",
|
||||
"MMMM DD, YYYY": "ММММ ДД, ГГГГ",
|
||||
"MMMM DD, YYYY HH:mm": "ММММ ДД, ГГГГ ЧЧ:мм",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "Модел „{{modelName}}“ је успешно преузет.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "Модел „{{modelTag}}“ је већ у реду за преузимање.",
|
||||
"Model {{modelId}} not found": "Модел {{modelId}} није пронађен",
|
||||
|
|
@ -492,6 +496,7 @@
|
|||
"System": "Систем",
|
||||
"System Prompt": "Системски упит",
|
||||
"Tags": "Ознаке",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "Реците нам више:",
|
||||
"Temperature": "Температура",
|
||||
|
|
@ -535,8 +540,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Унесите Hugging Face Resolve (Download) адресу",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "Упс! Дошло је до проблема при повезивању са {{provider}}.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Непознат тип датотеке '{{file_type}}', али прихваћен и третиран као обичан текст",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "Ажурирај и копирај везу",
|
||||
"Update password": "Ажурирај лозинку",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "Отпреми GGUF модел",
|
||||
"Upload Files": "Отпремање датотека",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "Tillåt",
|
||||
"Allow Chat Deletion": "Tillåt chattborttagning",
|
||||
"Allow non-local voices": "Tillåt icke-lokala röster",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "alfanumeriska tecken och bindestreck",
|
||||
"Already have an account?": "Har du redan ett konto?",
|
||||
"an assistant": "en assistent",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "t.ex. '30s', '10m'. Giltiga tidsenheter är 's', 'm', 'h'.",
|
||||
"Edit": "Redigera",
|
||||
"Edit Doc": "Redigera dokument",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Redigera användare",
|
||||
"Email": "E-post",
|
||||
"Embedding Batch Size": "Batchstorlek för inbäddning",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "Kunskap",
|
||||
"Language": "Språk",
|
||||
"Last Active": "Senast aktiv",
|
||||
"Last Modified": "",
|
||||
"Light": "Ljus",
|
||||
"Listening...": "Lyssnar...",
|
||||
"LLMs can make mistakes. Verify important information.": "LLM:er kan göra misstag. Granska viktig information.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "Modellen '{{modelName}}' har laddats ner framgångsrikt.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "Modellen '{{modelTag}}' är redan i kö för nedladdning.",
|
||||
"Model {{modelId}} not found": "Modell {{modelId}} hittades inte",
|
||||
|
|
@ -491,6 +495,7 @@
|
|||
"System": "System",
|
||||
"System Prompt": "Systeminstruktion",
|
||||
"Tags": "Taggar",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "Berätta mer:",
|
||||
"Temperature": "Temperatur",
|
||||
|
|
@ -534,8 +539,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Skriv Hugging Face Resolve (nedladdning) URL",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "Oj då! Det uppstod ett problem med anslutningen till {{provider}}.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Okänd filtyp '{{file_type}}', men accepterar och behandlar som vanlig text",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "Uppdatera och kopiera länk",
|
||||
"Update password": "Uppdatera lösenord",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "Ladda upp en GGUF-modell",
|
||||
"Upload Files": "Ladda upp filer",
|
||||
"Upload Pipeline": "Ladda upp rörledning",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "",
|
||||
"Allow Chat Deletion": "",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "",
|
||||
"Already have an account?": "",
|
||||
"an assistant": "",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "",
|
||||
"Edit": "",
|
||||
"Edit Doc": "",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "",
|
||||
"Email": "",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "",
|
||||
"Last Active": "",
|
||||
"Last Modified": "",
|
||||
"Light": "",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "",
|
||||
"MMMM DD, YYYY": "",
|
||||
"MMMM DD, YYYY HH:mm": "",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "",
|
||||
"Model {{modelId}} not found": "",
|
||||
|
|
@ -491,6 +495,7 @@
|
|||
"System": "",
|
||||
"System Prompt": "",
|
||||
"Tags": "",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "",
|
||||
"Temperature": "",
|
||||
|
|
@ -534,8 +539,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "",
|
||||
"Update password": "",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "",
|
||||
"Upload Files": "",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "İzin ver",
|
||||
"Allow Chat Deletion": "Sohbet Silmeye İzin Ver",
|
||||
"Allow non-local voices": "Yerel olmayan seslere izin verin",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "alfanumerik karakterler ve tireler",
|
||||
"Already have an account?": "Zaten bir hesabınız mı var?",
|
||||
"an assistant": "bir asistan",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "örn. '30s', '10m'. Geçerli zaman birimleri 's', 'm', 'h'.",
|
||||
"Edit": "Düzenle",
|
||||
"Edit Doc": "Belgeyi Düzenle",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Kullanıcıyı Düzenle",
|
||||
"Email": "E-posta",
|
||||
"Embedding Batch Size": "Gömme Yığın Boyutu",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "Dil",
|
||||
"Last Active": "Son Aktivite",
|
||||
"Last Modified": "",
|
||||
"Light": "Açık",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "LLM'ler hata yapabilir. Önemli bilgileri doğrulayın.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "DD MMMM YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "DD MMMM YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "'{{modelName}}' başarıyla indirildi.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "'{{modelTag}}' zaten indirme sırasında.",
|
||||
"Model {{modelId}} not found": "{{modelId}} bulunamadı",
|
||||
|
|
@ -491,6 +495,7 @@
|
|||
"System": "Sistem",
|
||||
"System Prompt": "Sistem Promptu",
|
||||
"Tags": "Etiketler",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "Bize daha fazlasını anlat:",
|
||||
"Temperature": "Temperature",
|
||||
|
|
@ -534,8 +539,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Hugging Face Resolve (Download) URL'sini Yazın",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "Ah! {{provider}}'a bağlanırken bir sorun oluştu.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Bilinmeyen Dosya Türü '{{file_type}}', ancak düz metin olarak kabul ediliyor ve işleniyor",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "Güncelle ve Bağlantıyı Kopyala",
|
||||
"Update password": "Parolayı Güncelle",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "Bir GGUF modeli yükle",
|
||||
"Upload Files": "Dosyaları Yükle",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "Дозволити",
|
||||
"Allow Chat Deletion": "Дозволити видалення чату",
|
||||
"Allow non-local voices": "Дозволити не локальні голоси",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "алфавітно-цифрові символи та дефіси",
|
||||
"Already have an account?": "Вже є обліковий запис?",
|
||||
"an assistant": "асистента",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "напр., '30s','10m'. Дійсні одиниці часу: 'с', 'хв', 'г'.",
|
||||
"Edit": "Редагувати",
|
||||
"Edit Doc": "Редагувати документ",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Редагувати користувача",
|
||||
"Email": "Електронна пошта",
|
||||
"Embedding Batch Size": "Розмір пакету під час вбудовування",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "Мова",
|
||||
"Last Active": "Остання активність",
|
||||
"Last Modified": "",
|
||||
"Light": "Світла",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "LLMs можуть помилятися. Перевірте важливу інформацію.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "Модель '{{modelName}}' успішно завантажено.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "Модель '{{modelTag}}' вже знаходиться в черзі на завантаження.",
|
||||
"Model {{modelId}} not found": "Модель {{modelId}} не знайдено",
|
||||
|
|
@ -493,6 +497,7 @@
|
|||
"System": "Система",
|
||||
"System Prompt": "Системний промт",
|
||||
"Tags": "Теги",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "Розкажи нам більше:",
|
||||
"Temperature": "Температура",
|
||||
|
|
@ -536,8 +541,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Введіть URL ресурсу Hugging Face Resolve (завантаження)",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "Ой! Виникла проблема при підключенні до {{provider}}.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Невідомий тип файлу '{{file_type}}', але приймається та обробляється як звичайний текст",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "Оновлення та копіювання посилання",
|
||||
"Update password": "Оновити пароль",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "Завантажити GGUF модель",
|
||||
"Upload Files": "Завантажити файли",
|
||||
"Upload Pipeline": "Завантаження Pipeline",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "Cho phép",
|
||||
"Allow Chat Deletion": "Cho phép Xóa nội dung chat",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "ký tự số và gạch nối",
|
||||
"Already have an account?": "Bạn đã có tài khoản?",
|
||||
"an assistant": "trợ lý",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "vd: '30s','10m'. Đơn vị thời gian hợp lệ là 's', 'm', 'h'.",
|
||||
"Edit": "Chỉnh sửa",
|
||||
"Edit Doc": "Thay đổi tài liệu",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "Thay đổi thông tin người sử dụng",
|
||||
"Email": "Email",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "Kiến thức",
|
||||
"Language": "Ngôn ngữ",
|
||||
"Last Active": "Truy cập gần nhất",
|
||||
"Last Modified": "",
|
||||
"Light": "Sáng",
|
||||
"Listening...": "Đang nghe...",
|
||||
"LLMs can make mistakes. Verify important information.": "Hệ thống có thể tạo ra nội dung không chính xác hoặc sai. Hãy kiểm chứng kỹ lưỡng thông tin trước khi tiếp nhận và sử dụng.",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "Mô hình '{{modelName}}' đã được tải xuống thành công.",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "Mô hình '{{modelTag}}' đã có trong hàng đợi để tải xuống.",
|
||||
"Model {{modelId}} not found": "Không tìm thấy Mô hình {{modelId}}",
|
||||
|
|
@ -490,6 +494,7 @@
|
|||
"System": "Hệ thống",
|
||||
"System Prompt": "Prompt Hệ thống (System Prompt)",
|
||||
"Tags": "Thẻ",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "Hãy cho chúng tôi hiểu thêm về chất lượng của câu trả lời:",
|
||||
"Temperature": "Mức độ sáng tạo",
|
||||
|
|
@ -533,8 +538,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "Nhập URL Hugging Face Resolve (Tải xuống)",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "Ồ! Đã xảy ra sự cố khi kết nối với {{provider}}.",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "Loại Tệp Không xác định '{{file_type}}', nhưng đang chấp nhận và xử lý như văn bản thô",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "Cập nhật và sao chép link",
|
||||
"Update password": "Cập nhật mật khẩu",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "Tải lên mô hình GGUF",
|
||||
"Upload Files": "Tải tệp lên máy chủ",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "允许",
|
||||
"Allow Chat Deletion": "允许删除聊天记录",
|
||||
"Allow non-local voices": "允许调用非本地音色",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "字母数字字符和连字符",
|
||||
"Already have an account?": "已经拥有账号了?",
|
||||
"an assistant": "助手",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "例如 '30s','10m'。有效的时间单位是秒:'s',分:'m',时:'h'。",
|
||||
"Edit": "编辑",
|
||||
"Edit Doc": "编辑文档",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "编辑用户",
|
||||
"Email": "电子邮箱",
|
||||
"Embedding Batch Size": "嵌入层批处理大小 (Embedding Batch Size)",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "知识库",
|
||||
"Language": "语言",
|
||||
"Last Active": "最后在线时间",
|
||||
"Last Modified": "",
|
||||
"Light": "浅色",
|
||||
"Listening...": "正在倾听...",
|
||||
"LLMs can make mistakes. Verify important information.": "大语言模型可能会生成误导性错误信息,请对关键信息加以验证。",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "YYYY年 MM月 DD日",
|
||||
"MMMM DD, YYYY HH:mm": "YYYY年 MM月 DD日 HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "模型'{{modelName}}'已成功下载。",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "模型'{{modelTag}}'已在下载队列中。",
|
||||
"Model {{modelId}} not found": "未找到模型 {{modelId}}",
|
||||
|
|
@ -490,6 +494,7 @@
|
|||
"System": "系统",
|
||||
"System Prompt": "系统提示词",
|
||||
"Tags": "标签",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "请告诉我们更多细节",
|
||||
"Temperature": "温度 (Temperature)",
|
||||
|
|
@ -533,8 +538,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "输入 Hugging Face 解析(下载)URL",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "糟糕!连接到 {{provider}} 时出现问题。",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "未知文件类型'{{file_type}}',将视为纯文本进行处理",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "更新和复制链接",
|
||||
"Update password": "更新密码",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "上传一个 GGUF 模型",
|
||||
"Upload Files": "上传文件",
|
||||
"Upload Pipeline": "上传 Pipeline",
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@
|
|||
"Allow": "允許",
|
||||
"Allow Chat Deletion": "允許刪除聊天紀錄",
|
||||
"Allow non-local voices": "",
|
||||
"Allow User Location": "",
|
||||
"alphanumeric characters and hyphens": "英文字母、數字(0~9)和連字符(-)",
|
||||
"Already have an account?": "已經有帳號了嗎?",
|
||||
"an assistant": "助手",
|
||||
|
|
@ -178,6 +179,7 @@
|
|||
"e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "例如 '30s', '10m'。有效的時間單位為 's', 'm', 'h'。",
|
||||
"Edit": "編輯",
|
||||
"Edit Doc": "編輯文件",
|
||||
"Edit Memory": "",
|
||||
"Edit User": "編輯使用者",
|
||||
"Email": "電子郵件",
|
||||
"Embedding Batch Size": "",
|
||||
|
|
@ -283,6 +285,7 @@
|
|||
"Knowledge": "",
|
||||
"Language": "語言",
|
||||
"Last Active": "最後活動",
|
||||
"Last Modified": "",
|
||||
"Light": "亮色",
|
||||
"Listening...": "",
|
||||
"LLMs can make mistakes. Verify important information.": "LLM 可能會產生錯誤。請驗證重要資訊。",
|
||||
|
|
@ -307,6 +310,7 @@
|
|||
"Mirostat Tau": "Mirostat Tau",
|
||||
"MMMM DD, YYYY": "MMMM DD, YYYY",
|
||||
"MMMM DD, YYYY HH:mm": "MMMM DD, YYYY HH:mm",
|
||||
"MMMM DD, YYYY hh:mm:ss A": "",
|
||||
"Model '{{modelName}}' has been successfully downloaded.": "'{{modelName}}' 模型已成功下載。",
|
||||
"Model '{{modelTag}}' is already in queue for downloading.": "'{{modelTag}}' 模型已經在下載佇列中。",
|
||||
"Model {{modelId}} not found": "找不到 {{modelId}} 模型",
|
||||
|
|
@ -490,6 +494,7 @@
|
|||
"System": "系統",
|
||||
"System Prompt": "系統提示詞",
|
||||
"Tags": "標籤",
|
||||
"Tap to interrupt": "",
|
||||
"Tavily API Key": "",
|
||||
"Tell us more:": "告訴我們更多:",
|
||||
"Temperature": "溫度",
|
||||
|
|
@ -533,8 +538,10 @@
|
|||
"Type Hugging Face Resolve (Download) URL": "輸入 Hugging Face 解析後的(下載)URL",
|
||||
"Uh-oh! There was an issue connecting to {{provider}}.": "哎呀!連線到 {{provider}} 時出現問題。",
|
||||
"Unknown File Type '{{file_type}}', but accepting and treating as plain text": "未知的文件類型 '{{file_type}}',但接受並視為純文字",
|
||||
"Update": "",
|
||||
"Update and Copy Link": "更新並複製連結",
|
||||
"Update password": "更新密碼",
|
||||
"Updated at": "",
|
||||
"Upload a GGUF model": "上傳一個 GGUF 模型",
|
||||
"Upload Files": "上傳文件",
|
||||
"Upload Pipeline": "",
|
||||
|
|
|
|||
|
|
@ -302,6 +302,29 @@ export const getImportOrigin = (_chats) => {
|
|||
return 'webui';
|
||||
};
|
||||
|
||||
export const getUserPosition = async (raw = false) => {
|
||||
// Get the user's location using the Geolocation API
|
||||
const position = await new Promise((resolve, reject) => {
|
||||
navigator.geolocation.getCurrentPosition(resolve, reject);
|
||||
}).catch((error) => {
|
||||
console.error('Error getting user location:', error);
|
||||
throw error;
|
||||
});
|
||||
|
||||
if (!position) {
|
||||
return 'Location not available';
|
||||
}
|
||||
|
||||
// Extract the latitude and longitude from the position
|
||||
const { latitude, longitude } = position.coords;
|
||||
|
||||
if (raw) {
|
||||
return { latitude, longitude };
|
||||
} else {
|
||||
return `${latitude.toFixed(3)}, ${longitude.toFixed(3)} (lat, long)`;
|
||||
}
|
||||
};
|
||||
|
||||
const convertOpenAIMessages = (convo) => {
|
||||
// Parse OpenAI chat messages and create chat dictionary for creating new chats
|
||||
const mapping = convo['mapping'];
|
||||
|
|
@ -474,7 +497,7 @@ export const blobToFile = (blob, fileName) => {
|
|||
export const promptTemplate = (
|
||||
template: string,
|
||||
user_name?: string,
|
||||
current_location?: string
|
||||
user_location?: string
|
||||
): string => {
|
||||
// Get the current date
|
||||
const currentDate = new Date();
|
||||
|
|
@ -487,17 +510,31 @@ export const promptTemplate = (
|
|||
'-' +
|
||||
String(currentDate.getDate()).padStart(2, '0');
|
||||
|
||||
// Format the time to HH:MM:SS AM/PM
|
||||
const currentTime = currentDate.toLocaleTimeString('en-US', {
|
||||
hour: 'numeric',
|
||||
minute: 'numeric',
|
||||
second: 'numeric',
|
||||
hour12: true
|
||||
});
|
||||
|
||||
// Replace {{CURRENT_DATETIME}} in the template with the formatted datetime
|
||||
template = template.replace('{{CURRENT_DATETIME}}', `${formattedDate} ${currentTime}`);
|
||||
|
||||
// Replace {{CURRENT_DATE}} in the template with the formatted date
|
||||
template = template.replace('{{CURRENT_DATE}}', formattedDate);
|
||||
|
||||
// Replace {{CURRENT_TIME}} in the template with the formatted time
|
||||
template = template.replace('{{CURRENT_TIME}}', currentTime);
|
||||
|
||||
if (user_name) {
|
||||
// Replace {{USER_NAME}} in the template with the user's name
|
||||
template = template.replace('{{USER_NAME}}', user_name);
|
||||
}
|
||||
|
||||
if (current_location) {
|
||||
// Replace {{CURRENT_LOCATION}} in the template with the current location
|
||||
template = template.replace('{{CURRENT_LOCATION}}', current_location);
|
||||
if (user_location) {
|
||||
// Replace {{USER_LOCATION}} in the template with the current location
|
||||
template = template.replace('{{USER_LOCATION}}', user_location);
|
||||
}
|
||||
|
||||
return template;
|
||||
|
|
|
|||
|
|
@ -77,6 +77,17 @@
|
|||
}
|
||||
loaded = true;
|
||||
});
|
||||
let sortKey = 'created_at'; // default sort key
|
||||
let sortOrder = 'asc'; // default sort order
|
||||
|
||||
function setSortKey(key) {
|
||||
if (sortKey === key) {
|
||||
sortOrder = sortOrder === 'asc' ? 'desc' : 'asc';
|
||||
} else {
|
||||
sortKey = key;
|
||||
sortOrder = 'asc';
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<ConfirmDialog
|
||||
|
|
@ -148,12 +159,66 @@
|
|||
<table class="w-full text-sm text-left text-gray-500 dark:text-gray-400 table-auto max-w-full">
|
||||
<thead class="text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-850 dark:text-gray-400">
|
||||
<tr>
|
||||
<th scope="col" class="px-3 py-2"> {$i18n.t('Role')} </th>
|
||||
<th scope="col" class="px-3 py-2"> {$i18n.t('Name')} </th>
|
||||
<th scope="col" class="px-3 py-2"> {$i18n.t('Email')} </th>
|
||||
<th scope="col" class="px-3 py-2"> {$i18n.t('Last Active')} </th>
|
||||
|
||||
<th scope="col" class="px-3 py-2"> {$i18n.t('Created at')} </th>
|
||||
<th
|
||||
scope="col"
|
||||
class="px-3 py-2 cursor-pointer select-none"
|
||||
on:click={() => setSortKey('role')}
|
||||
>
|
||||
{$i18n.t('Role')}
|
||||
{#if sortKey === 'role'}
|
||||
{sortOrder === 'asc' ? '▲' : '▼'}
|
||||
{:else}
|
||||
<span class="invisible">▲</span>
|
||||
{/if}
|
||||
</th>
|
||||
<th
|
||||
scope="col"
|
||||
class="px-3 py-2 cursor-pointer select-none"
|
||||
on:click={() => setSortKey('name')}
|
||||
>
|
||||
{$i18n.t('Name')}
|
||||
{#if sortKey === 'name'}
|
||||
{sortOrder === 'asc' ? '▲' : '▼'}
|
||||
{:else}
|
||||
<span class="invisible">▲</span>
|
||||
{/if}
|
||||
</th>
|
||||
<th
|
||||
scope="col"
|
||||
class="px-3 py-2 cursor-pointer select-none"
|
||||
on:click={() => setSortKey('email')}
|
||||
>
|
||||
{$i18n.t('Email')}
|
||||
{#if sortKey === 'email'}
|
||||
{sortOrder === 'asc' ? '▲' : '▼'}
|
||||
{:else}
|
||||
<span class="invisible">▲</span>
|
||||
{/if}
|
||||
</th>
|
||||
<th
|
||||
scope="col"
|
||||
class="px-3 py-2 cursor-pointer select-none"
|
||||
on:click={() => setSortKey('last_active_at')}
|
||||
>
|
||||
{$i18n.t('Last Active')}
|
||||
{#if sortKey === 'last_active_at'}
|
||||
{sortOrder === 'asc' ? '▲' : '▼'}
|
||||
{:else}
|
||||
<span class="invisible">▲</span>
|
||||
{/if}
|
||||
</th>
|
||||
<th
|
||||
scope="col"
|
||||
class="px-3 py-2 cursor-pointer select-none"
|
||||
on:click={() => setSortKey('created_at')}
|
||||
>
|
||||
{$i18n.t('Created at')}
|
||||
{#if sortKey === 'created_at'}
|
||||
{sortOrder === 'asc' ? '▲' : '▼'}
|
||||
{:else}
|
||||
<span class="invisible">▲</span>
|
||||
{/if}
|
||||
</th>
|
||||
|
||||
<th scope="col" class="px-3 py-2 text-right" />
|
||||
</tr>
|
||||
|
|
@ -169,6 +234,11 @@
|
|||
return name.includes(query);
|
||||
}
|
||||
})
|
||||
.sort((a, b) => {
|
||||
if (a[sortKey] < b[sortKey]) return sortOrder === 'asc' ? -1 : 1;
|
||||
if (a[sortKey] > b[sortKey]) return sortOrder === 'asc' ? 1 : -1;
|
||||
return 0;
|
||||
})
|
||||
.slice((page - 1) * 20, page * 20) as user}
|
||||
<tr class="bg-white border-b dark:bg-gray-900 dark:border-gray-850 text-xs">
|
||||
<td class="px-3 py-2 min-w-[7rem] w-28">
|
||||
|
|
|
|||
Loading…
Reference in a new issue