diff --git a/.github/workflows/docker-build.yaml b/.github/workflows/docker-build.yaml index da40f56ffe..0e62be3d90 100644 --- a/.github/workflows/docker-build.yaml +++ b/.github/workflows/docker-build.yaml @@ -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: diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index 2426aff27a..85810c2ed3 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -25,7 +25,7 @@ jobs: --file docker-compose.api.yaml \ --file docker-compose.a1111-test.yaml \ up --detach --build - + - name: Wait for Ollama to be up timeout-minutes: 5 run: | @@ -43,7 +43,7 @@ jobs: uses: cypress-io/github-action@v6 with: browser: chrome - wait-on: 'http://localhost:3000' + wait-on: "http://localhost:3000" config: baseUrl=http://localhost:3000 - uses: actions/upload-artifact@v4 @@ -82,18 +82,18 @@ jobs: --health-retries 5 ports: - 5432:5432 -# mysql: -# image: mysql -# env: -# MYSQL_ROOT_PASSWORD: mysql -# MYSQL_DATABASE: mysql -# options: >- -# --health-cmd "mysqladmin ping -h localhost" -# --health-interval 10s -# --health-timeout 5s -# --health-retries 5 -# ports: -# - 3306:3306 + # mysql: + # image: mysql + # env: + # MYSQL_ROOT_PASSWORD: mysql + # MYSQL_DATABASE: mysql + # options: >- + # --health-cmd "mysqladmin ping -h localhost" + # --health-interval 10s + # --health-timeout 5s + # --health-retries 5 + # ports: + # - 3306:3306 steps: - name: Checkout Repository uses: actions/checkout@v4 @@ -142,7 +142,6 @@ jobs: echo "Server has stopped" exit 1 fi - - name: Test backend with Postgres if: success() || steps.sqlite.conclusion == 'failure' @@ -171,6 +170,25 @@ jobs: exit 1 fi + # Check that service will reconnect to postgres when connection will be closed + status_code=$(curl --write-out %{http_code} -s --output /dev/null http://localhost:8081/health) + if [[ "$status_code" -ne 200 ]] ; then + echo "Server has failed before postgres reconnect check" + exit 1 + fi + + echo "Terminating all connections to postgres..." + python -c "import os, psycopg2 as pg2; \ + conn = pg2.connect(dsn=os.environ['DATABASE_URL'].replace('+pool', '')); \ + cur = conn.cursor(); \ + cur.execute('SELECT pg_terminate_backend(psa.pid) FROM pg_stat_activity psa WHERE datname = current_database() AND pid <> pg_backend_pid();')" + + status_code=$(curl --write-out %{http_code} -s --output /dev/null http://localhost:8081/health) + if [[ "$status_code" -ne 200 ]] ; then + echo "Server has not reconnected to postgres after connection was closed: returned status $status_code" + exit 1 + fi + # - name: Test backend with MySQL # if: success() || steps.sqlite.conclusion == 'failure' || steps.postgres.conclusion == 'failure' # env: diff --git a/CHANGELOG.md b/CHANGELOG.md index bfff72eed2..6756d105b2 100644 --- a/CHANGELOG.md +++ b/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 diff --git a/README.md b/README.md index 5f6e4550be..f3cfe0d274 100644 --- a/README.md +++ b/README.md @@ -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? 🌟 diff --git a/backend/apps/images/main.py b/backend/apps/images/main.py index 4419ccf199..af7e5592d5 100644 --- a/backend/apps/images/main.py +++ b/backend/apps/images/main.py @@ -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( diff --git a/backend/apps/images/utils/comfyui.py b/backend/apps/images/utils/comfyui.py index 05df1c1665..599b1f3379 100644 --- a/backend/apps/images/utils/comfyui.py +++ b/backend/apps/images/utils/comfyui.py @@ -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 diff --git a/backend/apps/ollama/main.py b/backend/apps/ollama/main.py index 118c688d3f..455dc89a52 100644 --- a/backend/apps/ollama/main.py +++ b/backend/apps/ollama/main.py @@ -40,6 +40,7 @@ from utils.utils import ( get_verified_user, get_admin_user, ) +from utils.task import prompt_template from config import ( @@ -52,7 +53,7 @@ from config import ( UPLOAD_DIR, AppConfig, ) -from utils.misc import calculate_sha256 +from utils.misc import calculate_sha256, add_or_update_system_message log = logging.getLogger(__name__) log.setLevel(SRC_LOG_LEVELS["OLLAMA"]) @@ -199,9 +200,6 @@ def merge_models_lists(model_lists): return list(merged_models.values()) -# user=Depends(get_current_user) - - async def get_all_models(): log.info("get_all_models()") @@ -817,24 +815,28 @@ async def generate_chat_completion( "num_thread", None ) - if model_info.params.get("system", None): + system = model_info.params.get("system", None) + if system: # Check if the payload already has a system message # If not, add a system message to the payload + system = prompt_template( + system, + **( + { + "user_name": user.name, + "user_location": ( + user.info.get("location") if user.info else None + ), + } + if user + else {} + ), + ) + if payload.get("messages"): - for message in payload["messages"]: - if message.get("role") == "system": - message["content"] = ( - model_info.params.get("system", None) + message["content"] - ) - break - else: - payload["messages"].insert( - 0, - { - "role": "system", - "content": model_info.params.get("system", None), - }, - ) + payload["messages"] = add_or_update_system_message( + system, payload["messages"] + ) if url_idx == None: if ":" not in payload["model"]: @@ -850,8 +852,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)) @@ -879,10 +880,11 @@ class OpenAIChatCompletionForm(BaseModel): @app.post("/v1/chat/completions") @app.post("/v1/chat/completions/{url_idx}") async def generate_openai_chat_completion( - form_data: OpenAIChatCompletionForm, + form_data: dict, url_idx: Optional[int] = None, user=Depends(get_verified_user), ): + form_data = OpenAIChatCompletionForm(**form_data) payload = { **form_data.model_dump(exclude_none=True), @@ -914,22 +916,35 @@ async def generate_openai_chat_completion( else None ) - if model_info.params.get("system", None): + system = model_info.params.get("system", None) + + if system: + system = prompt_template( + system, + **( + { + "user_name": user.name, + "user_location": ( + user.info.get("location") if user.info else None + ), + } + if user + else {} + ), + ) # Check if the payload already has a system message # If not, add a system message to the payload if payload.get("messages"): for message in payload["messages"]: if message.get("role") == "system": - message["content"] = ( - model_info.params.get("system", None) + message["content"] - ) + message["content"] = system + message["content"] break else: payload["messages"].insert( 0, { "role": "system", - "content": model_info.params.get("system", None), + "content": system, }, ) @@ -1095,17 +1110,13 @@ async def download_file_stream( raise "Ollama: Could not create blob, Please try again." -# def number_generator(): -# for i in range(1, 101): -# yield f"data: {i}\n" - - # url = "https://huggingface.co/TheBloke/stablelm-zephyr-3b-GGUF/resolve/main/stablelm-zephyr-3b.Q2_K.gguf" @app.post("/models/download") @app.post("/models/download/{url_idx}") async def download_model( form_data: UrlForm, url_idx: Optional[int] = None, + user=Depends(get_admin_user), ): allowed_hosts = ["https://huggingface.co/", "https://github.com/"] @@ -1134,7 +1145,11 @@ async def download_model( @app.post("/models/upload") @app.post("/models/upload/{url_idx}") -def upload_model(file: UploadFile = File(...), url_idx: Optional[int] = None): +def upload_model( + file: UploadFile = File(...), + url_idx: Optional[int] = None, + user=Depends(get_admin_user), +): if url_idx == None: url_idx = 0 ollama_url = app.state.config.OLLAMA_BASE_URLS[url_idx] @@ -1197,137 +1212,3 @@ def upload_model(file: UploadFile = File(...), url_idx: Optional[int] = None): yield f"data: {json.dumps(res)}\n\n" return StreamingResponse(file_process_stream(), media_type="text/event-stream") - - -# async def upload_model(file: UploadFile = File(), url_idx: Optional[int] = None): -# if url_idx == None: -# url_idx = 0 -# url = app.state.config.OLLAMA_BASE_URLS[url_idx] - -# file_location = os.path.join(UPLOAD_DIR, file.filename) -# total_size = file.size - -# async def file_upload_generator(file): -# print(file) -# try: -# async with aiofiles.open(file_location, "wb") as f: -# completed_size = 0 -# while True: -# chunk = await file.read(1024*1024) -# if not chunk: -# break -# await f.write(chunk) -# completed_size += len(chunk) -# progress = (completed_size / total_size) * 100 - -# print(progress) -# yield f'data: {json.dumps({"status": "uploading", "percentage": progress, "total": total_size, "completed": completed_size, "done": False})}\n' -# except Exception as e: -# print(e) -# yield f"data: {json.dumps({'status': 'error', 'message': str(e)})}\n" -# finally: -# await file.close() -# print("done") -# yield f'data: {json.dumps({"status": "completed", "percentage": 100, "total": total_size, "completed": completed_size, "done": True})}\n' - -# return StreamingResponse( -# file_upload_generator(copy.deepcopy(file)), media_type="text/event-stream" -# ) - - -@app.api_route("/{path:path}", methods=["GET", "POST", "PUT", "DELETE"]) -async def deprecated_proxy( - path: str, request: Request, user=Depends(get_verified_user) -): - url = app.state.config.OLLAMA_BASE_URLS[0] - target_url = f"{url}/{path}" - - body = await request.body() - headers = dict(request.headers) - - if user.role in ["user", "admin"]: - if path in ["pull", "delete", "push", "copy", "create"]: - if user.role != "admin": - raise HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, - detail=ERROR_MESSAGES.ACCESS_PROHIBITED, - ) - else: - raise HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, - detail=ERROR_MESSAGES.ACCESS_PROHIBITED, - ) - - headers.pop("host", None) - headers.pop("authorization", None) - headers.pop("origin", None) - headers.pop("referer", None) - - r = None - - def get_request(): - nonlocal r - - request_id = str(uuid.uuid4()) - try: - REQUEST_POOL.append(request_id) - - def stream_content(): - try: - if path == "generate": - data = json.loads(body.decode("utf-8")) - - if data.get("stream", True): - yield json.dumps({"id": request_id, "done": False}) + "\n" - - elif path == "chat": - yield json.dumps({"id": request_id, "done": False}) + "\n" - - for chunk in r.iter_content(chunk_size=8192): - if request_id in REQUEST_POOL: - yield chunk - else: - log.warning("User: canceled request") - break - finally: - if hasattr(r, "close"): - r.close() - if request_id in REQUEST_POOL: - REQUEST_POOL.remove(request_id) - - r = requests.request( - method=request.method, - url=target_url, - data=body, - headers=headers, - stream=True, - ) - - r.raise_for_status() - - # r.close() - - return StreamingResponse( - stream_content(), - status_code=r.status_code, - headers=dict(r.headers), - ) - except Exception as e: - raise e - - try: - return await run_in_threadpool(get_request) - except Exception as e: - error_detail = "Open WebUI: Server Connection Error" - if r is not None: - try: - res = r.json() - if "error" in res: - error_detail = f"Ollama: {res['error']}" - except: - error_detail = f"Ollama: {e}" - - raise HTTPException( - status_code=r.status_code if r else 500, - detail=error_detail, - ) diff --git a/backend/apps/openai/main.py b/backend/apps/openai/main.py index 93f913dea2..302dd8d98d 100644 --- a/backend/apps/openai/main.py +++ b/backend/apps/openai/main.py @@ -20,6 +20,8 @@ from utils.utils import ( get_verified_user, get_admin_user, ) +from utils.task import prompt_template + from config import ( SRC_LOG_LEVELS, ENABLE_OPENAI_API, @@ -392,22 +394,34 @@ async def generate_chat_completion( else None ) - if model_info.params.get("system", None): + system = model_info.params.get("system", None) + if system: + system = prompt_template( + system, + **( + { + "user_name": user.name, + "user_location": ( + user.info.get("location") if user.info else None + ), + } + if user + else {} + ), + ) # Check if the payload already has a system message # If not, add a system message to the payload if payload.get("messages"): for message in payload["messages"]: if message.get("role") == "system": - message["content"] = ( - model_info.params.get("system", None) + message["content"] - ) + message["content"] = system + message["content"] break else: payload["messages"].insert( 0, { "role": "system", - "content": model_info.params.get("system", None), + "content": system, }, ) @@ -418,7 +432,12 @@ async def generate_chat_completion( idx = model["urlIdx"] if "pipeline" in model and model.get("pipeline"): - payload["user"] = {"name": user.name, "id": user.id} + payload["user"] = { + "name": user.name, + "id": user.id, + "email": user.email, + "role": user.role, + } # Check if the model is "gpt-4-vision-preview" and set "max_tokens" to 4000 # This is a workaround until OpenAI fixes the issue with this model @@ -430,13 +449,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" diff --git a/backend/apps/rag/main.py b/backend/apps/rag/main.py index 4bd5da86cc..00ae4e892d 100644 --- a/backend/apps/rag/main.py +++ b/backend/apps/rag/main.py @@ -55,6 +55,9 @@ from apps.webui.models.documents import ( DocumentForm, DocumentResponse, ) +from apps.webui.models.files import ( + Files, +) from apps.rag.utils import ( get_model_path, @@ -112,6 +115,7 @@ from config import ( YOUTUBE_LOADER_LANGUAGE, ENABLE_RAG_WEB_SEARCH, RAG_WEB_SEARCH_ENGINE, + RAG_WEB_SEARCH_DOMAIN_FILTER_LIST, SEARXNG_QUERY_URL, GOOGLE_PSE_API_KEY, GOOGLE_PSE_ENGINE_ID, @@ -165,6 +169,7 @@ app.state.YOUTUBE_LOADER_TRANSLATION = None app.state.config.ENABLE_RAG_WEB_SEARCH = ENABLE_RAG_WEB_SEARCH app.state.config.RAG_WEB_SEARCH_ENGINE = RAG_WEB_SEARCH_ENGINE +app.state.config.RAG_WEB_SEARCH_DOMAIN_FILTER_LIST = RAG_WEB_SEARCH_DOMAIN_FILTER_LIST app.state.config.SEARXNG_QUERY_URL = SEARXNG_QUERY_URL app.state.config.GOOGLE_PSE_API_KEY = GOOGLE_PSE_API_KEY @@ -775,6 +780,7 @@ def search_web(engine: str, query: str) -> list[SearchResult]: app.state.config.SEARXNG_QUERY_URL, query, app.state.config.RAG_WEB_SEARCH_RESULT_COUNT, + app.state.config.RAG_WEB_SEARCH_DOMAIN_FILTER_LIST, ) else: raise Exception("No SEARXNG_QUERY_URL found in environment variables") @@ -788,6 +794,7 @@ def search_web(engine: str, query: str) -> list[SearchResult]: app.state.config.GOOGLE_PSE_ENGINE_ID, query, app.state.config.RAG_WEB_SEARCH_RESULT_COUNT, + app.state.config.RAG_WEB_SEARCH_DOMAIN_FILTER_LIST, ) else: raise Exception( @@ -799,6 +806,7 @@ def search_web(engine: str, query: str) -> list[SearchResult]: app.state.config.BRAVE_SEARCH_API_KEY, query, app.state.config.RAG_WEB_SEARCH_RESULT_COUNT, + app.state.config.RAG_WEB_SEARCH_DOMAIN_FILTER_LIST, ) else: raise Exception("No BRAVE_SEARCH_API_KEY found in environment variables") @@ -808,6 +816,7 @@ def search_web(engine: str, query: str) -> list[SearchResult]: app.state.config.SERPSTACK_API_KEY, query, app.state.config.RAG_WEB_SEARCH_RESULT_COUNT, + app.state.config.RAG_WEB_SEARCH_DOMAIN_FILTER_LIST, https_enabled=app.state.config.SERPSTACK_HTTPS, ) else: @@ -818,6 +827,7 @@ def search_web(engine: str, query: str) -> list[SearchResult]: app.state.config.SERPER_API_KEY, query, app.state.config.RAG_WEB_SEARCH_RESULT_COUNT, + app.state.config.RAG_WEB_SEARCH_DOMAIN_FILTER_LIST, ) else: raise Exception("No SERPER_API_KEY found in environment variables") @@ -827,11 +837,16 @@ def search_web(engine: str, query: str) -> list[SearchResult]: app.state.config.SERPLY_API_KEY, query, app.state.config.RAG_WEB_SEARCH_RESULT_COUNT, + app.state.config.RAG_WEB_SEARCH_DOMAIN_FILTER_LIST, ) else: raise Exception("No SERPLY_API_KEY found in environment variables") elif engine == "duckduckgo": - return search_duckduckgo(query, app.state.config.RAG_WEB_SEARCH_RESULT_COUNT) + return search_duckduckgo( + query, + app.state.config.RAG_WEB_SEARCH_RESULT_COUNT, + app.state.config.RAG_WEB_SEARCH_DOMAIN_FILTER_LIST, + ) elif engine == "tavily": if app.state.config.TAVILY_API_KEY: return search_tavily( @@ -1119,6 +1134,60 @@ def store_doc( ) +class ProcessDocForm(BaseModel): + file_id: str + collection_name: Optional[str] = None + + +@app.post("/process/doc") +def process_doc( + form_data: ProcessDocForm, + user=Depends(get_current_user), +): + try: + file = Files.get_file_by_id(form_data.file_id) + file_path = file.meta.get("path", f"{UPLOAD_DIR}/{file.filename}") + + f = open(file_path, "rb") + + collection_name = form_data.collection_name + if collection_name == None: + collection_name = calculate_sha256(f)[:63] + f.close() + + loader, known_type = get_loader( + file.filename, file.meta.get("content_type"), file_path + ) + data = loader.load() + + try: + result = store_data_in_vector_db(data, collection_name) + + if result: + return { + "status": True, + "collection_name": collection_name, + "known_type": known_type, + } + except Exception as e: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=e, + ) + except Exception as e: + log.exception(e) + if "No pandoc was found" in str(e): + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.PANDOC_NOT_INSTALLED, + ) + else: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT(e), + ) + + class TextRAGForm(BaseModel): name: str content: str diff --git a/backend/apps/rag/search/brave.py b/backend/apps/rag/search/brave.py index 4e0f56807f..76ad1fb473 100644 --- a/backend/apps/rag/search/brave.py +++ b/backend/apps/rag/search/brave.py @@ -1,15 +1,17 @@ import logging - +from typing import List, Optional import requests -from apps.rag.search.main import SearchResult +from apps.rag.search.main import SearchResult, get_filtered_results from config import SRC_LOG_LEVELS log = logging.getLogger(__name__) log.setLevel(SRC_LOG_LEVELS["RAG"]) -def search_brave(api_key: str, query: str, count: int) -> list[SearchResult]: +def search_brave( + api_key: str, query: str, count: int, filter_list: Optional[List[str]] = None +) -> list[SearchResult]: """Search using Brave's Search API and return the results as a list of SearchResult objects. Args: @@ -29,6 +31,9 @@ def search_brave(api_key: str, query: str, count: int) -> list[SearchResult]: json_response = response.json() results = json_response.get("web", {}).get("results", []) + if filter_list: + results = get_filtered_results(results, filter_list) + return [ SearchResult( link=result["url"], title=result.get("title"), snippet=result.get("snippet") diff --git a/backend/apps/rag/search/duckduckgo.py b/backend/apps/rag/search/duckduckgo.py index 188ae2bea4..f0cc2a7103 100644 --- a/backend/apps/rag/search/duckduckgo.py +++ b/backend/apps/rag/search/duckduckgo.py @@ -1,6 +1,6 @@ import logging - -from apps.rag.search.main import SearchResult +from typing import List, Optional +from apps.rag.search.main import SearchResult, get_filtered_results from duckduckgo_search import DDGS from config import SRC_LOG_LEVELS @@ -8,7 +8,9 @@ log = logging.getLogger(__name__) log.setLevel(SRC_LOG_LEVELS["RAG"]) -def search_duckduckgo(query: str, count: int) -> list[SearchResult]: +def search_duckduckgo( + query: str, count: int, filter_list: Optional[List[str]] = None +) -> list[SearchResult]: """ Search using DuckDuckGo's Search API and return the results as a list of SearchResult objects. Args: @@ -41,6 +43,7 @@ def search_duckduckgo(query: str, count: int) -> list[SearchResult]: snippet=result.get("body"), ) ) - print(results) + if filter_list: + results = get_filtered_results(results, filter_list) # Return the list of search results return results diff --git a/backend/apps/rag/search/google_pse.py b/backend/apps/rag/search/google_pse.py index 7ff54c7850..0c78512e74 100644 --- a/backend/apps/rag/search/google_pse.py +++ b/backend/apps/rag/search/google_pse.py @@ -1,9 +1,9 @@ import json import logging - +from typing import List, Optional import requests -from apps.rag.search.main import SearchResult +from apps.rag.search.main import SearchResult, get_filtered_results from config import SRC_LOG_LEVELS log = logging.getLogger(__name__) @@ -11,7 +11,11 @@ log.setLevel(SRC_LOG_LEVELS["RAG"]) def search_google_pse( - api_key: str, search_engine_id: str, query: str, count: int + api_key: str, + search_engine_id: str, + query: str, + count: int, + filter_list: Optional[List[str]] = None, ) -> list[SearchResult]: """Search using Google's Programmable Search Engine API and return the results as a list of SearchResult objects. @@ -35,6 +39,8 @@ def search_google_pse( json_response = response.json() results = json_response.get("items", []) + if filter_list: + results = get_filtered_results(results, filter_list) return [ SearchResult( link=result["link"], diff --git a/backend/apps/rag/search/main.py b/backend/apps/rag/search/main.py index b5478f9496..49056f1fd1 100644 --- a/backend/apps/rag/search/main.py +++ b/backend/apps/rag/search/main.py @@ -1,8 +1,19 @@ from typing import Optional - +from urllib.parse import urlparse from pydantic import BaseModel +def get_filtered_results(results, filter_list): + if not filter_list: + return results + filtered_results = [] + for result in results: + domain = urlparse(result["url"]).netloc + if any(domain.endswith(filtered_domain) for filtered_domain in filter_list): + filtered_results.append(result) + return filtered_results + + class SearchResult(BaseModel): link: str title: Optional[str] diff --git a/backend/apps/rag/search/searxng.py b/backend/apps/rag/search/searxng.py index c8ad888133..6e545e994e 100644 --- a/backend/apps/rag/search/searxng.py +++ b/backend/apps/rag/search/searxng.py @@ -1,9 +1,9 @@ import logging import requests -from typing import List +from typing import List, Optional -from apps.rag.search.main import SearchResult +from apps.rag.search.main import SearchResult, get_filtered_results from config import SRC_LOG_LEVELS log = logging.getLogger(__name__) @@ -11,7 +11,11 @@ log.setLevel(SRC_LOG_LEVELS["RAG"]) def search_searxng( - query_url: str, query: str, count: int, **kwargs + query_url: str, + query: str, + count: int, + filter_list: Optional[List[str]] = None, + **kwargs, ) -> List[SearchResult]: """ Search a SearXNG instance for a given query and return the results as a list of SearchResult objects. @@ -78,6 +82,8 @@ def search_searxng( json_response = response.json() results = json_response.get("results", []) sorted_results = sorted(results, key=lambda x: x.get("score", 0), reverse=True) + if filter_list: + sorted_results = get_filtered_results(sorted_results, filter_list) return [ SearchResult( link=result["url"], title=result.get("title"), snippet=result.get("content") diff --git a/backend/apps/rag/search/serper.py b/backend/apps/rag/search/serper.py index 150da6e074..b278a4df15 100644 --- a/backend/apps/rag/search/serper.py +++ b/backend/apps/rag/search/serper.py @@ -1,16 +1,18 @@ import json import logging - +from typing import List, Optional import requests -from apps.rag.search.main import SearchResult +from apps.rag.search.main import SearchResult, get_filtered_results from config import SRC_LOG_LEVELS log = logging.getLogger(__name__) log.setLevel(SRC_LOG_LEVELS["RAG"]) -def search_serper(api_key: str, query: str, count: int) -> list[SearchResult]: +def search_serper( + api_key: str, query: str, count: int, filter_list: Optional[List[str]] = None +) -> list[SearchResult]: """Search using serper.dev's API and return the results as a list of SearchResult objects. Args: @@ -29,6 +31,8 @@ def search_serper(api_key: str, query: str, count: int) -> list[SearchResult]: results = sorted( json_response.get("organic", []), key=lambda x: x.get("position", 0) ) + if filter_list: + results = get_filtered_results(results, filter_list) return [ SearchResult( link=result["link"], diff --git a/backend/apps/rag/search/serply.py b/backend/apps/rag/search/serply.py index fccf70ecd8..24b249b739 100644 --- a/backend/apps/rag/search/serply.py +++ b/backend/apps/rag/search/serply.py @@ -1,10 +1,10 @@ import json import logging - +from typing import List, Optional import requests from urllib.parse import urlencode -from apps.rag.search.main import SearchResult +from apps.rag.search.main import SearchResult, get_filtered_results from config import SRC_LOG_LEVELS log = logging.getLogger(__name__) @@ -19,6 +19,7 @@ def search_serply( limit: int = 10, device_type: str = "desktop", proxy_location: str = "US", + filter_list: Optional[List[str]] = None, ) -> list[SearchResult]: """Search using serper.dev's API and return the results as a list of SearchResult objects. @@ -57,7 +58,8 @@ def search_serply( results = sorted( json_response.get("results", []), key=lambda x: x.get("realPosition", 0) ) - + if filter_list: + results = get_filtered_results(results, filter_list) return [ SearchResult( link=result["link"], diff --git a/backend/apps/rag/search/serpstack.py b/backend/apps/rag/search/serpstack.py index 0d247d1ab0..64b0f117d9 100644 --- a/backend/apps/rag/search/serpstack.py +++ b/backend/apps/rag/search/serpstack.py @@ -1,9 +1,9 @@ import json import logging - +from typing import List, Optional import requests -from apps.rag.search.main import SearchResult +from apps.rag.search.main import SearchResult, get_filtered_results from config import SRC_LOG_LEVELS log = logging.getLogger(__name__) @@ -11,7 +11,11 @@ log.setLevel(SRC_LOG_LEVELS["RAG"]) def search_serpstack( - api_key: str, query: str, count: int, https_enabled: bool = True + api_key: str, + query: str, + count: int, + filter_list: Optional[List[str]] = None, + https_enabled: bool = True, ) -> list[SearchResult]: """Search using serpstack.com's and return the results as a list of SearchResult objects. @@ -35,6 +39,8 @@ def search_serpstack( results = sorted( json_response.get("organic_results", []), key=lambda x: x.get("position", 0) ) + if filter_list: + results = get_filtered_results(results, filter_list) return [ SearchResult( link=result["url"], title=result.get("title"), snippet=result.get("snippet") diff --git a/backend/apps/rag/utils.py b/backend/apps/rag/utils.py index d0570f7482..7b4324d9af 100644 --- a/backend/apps/rag/utils.py +++ b/backend/apps/rag/utils.py @@ -237,7 +237,7 @@ def get_embedding_function( def get_rag_context( - docs, + files, messages, embedding_function, k, @@ -245,29 +245,29 @@ def get_rag_context( r, hybrid_search, ): - log.debug(f"docs: {docs} {messages} {embedding_function} {reranking_function}") + log.debug(f"files: {files} {messages} {embedding_function} {reranking_function}") query = get_last_user_message(messages) extracted_collections = [] relevant_contexts = [] - for doc in docs: + for file in files: context = None collection_names = ( - doc["collection_names"] - if doc["type"] == "collection" - else [doc["collection_name"]] + file["collection_names"] + if file["type"] == "collection" + else [file["collection_name"]] ) collection_names = set(collection_names).difference(extracted_collections) if not collection_names: - log.debug(f"skipping {doc} as it has already been extracted") + log.debug(f"skipping {file} as it has already been extracted") continue try: - if doc["type"] == "text": - context = doc["content"] + if file["type"] == "text": + context = file["content"] else: if hybrid_search: context = query_collection_with_hybrid_search( @@ -290,7 +290,7 @@ def get_rag_context( context = None if context: - relevant_contexts.append({**context, "source": doc}) + relevant_contexts.append({**context, "source": file}) extracted_collections.extend(collection_names) diff --git a/backend/apps/webui/internal/db.py b/backend/apps/webui/internal/db.py index 0e7b1f95d1..80c30d652a 100644 --- a/backend/apps/webui/internal/db.py +++ b/backend/apps/webui/internal/db.py @@ -1,11 +1,12 @@ +import os +import logging import json from peewee import * from peewee_migrate import Router -from playhouse.db_url import connect + +from apps.webui.internal.wrappers import register_connection from config import SRC_LOG_LEVELS, DATA_DIR, DATABASE_URL, BACKEND_DIR -import os -import logging log = logging.getLogger(__name__) log.setLevel(SRC_LOG_LEVELS["DB"]) @@ -28,12 +29,26 @@ if os.path.exists(f"{DATA_DIR}/ollama.db"): else: pass -DB = connect(DATABASE_URL) -log.info(f"Connected to a {DB.__class__.__name__} database.") + +# The `register_connection` function encapsulates the logic for setting up +# the database connection based on the connection string, while `connect` +# is a Peewee-specific method to manage the connection state and avoid errors +# when a connection is already open. +try: + DB = register_connection(DATABASE_URL) + log.info(f"Connected to a {DB.__class__.__name__} database.") +except Exception as e: + log.error(f"Failed to initialize the database connection: {e}") + raise + router = Router( DB, migrate_dir=BACKEND_DIR / "apps" / "webui" / "internal" / "migrations", logger=log, ) router.run() -DB.connect(reuse_if_open=True) +try: + DB.connect(reuse_if_open=True) +except OperationalError as e: + log.info(f"Failed to connect to database again due to: {e}") + pass diff --git a/backend/apps/webui/internal/migrations/013_add_user_info.py b/backend/apps/webui/internal/migrations/013_add_user_info.py new file mode 100644 index 0000000000..0f68669cca --- /dev/null +++ b/backend/apps/webui/internal/migrations/013_add_user_info.py @@ -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") diff --git a/backend/apps/webui/internal/migrations/014_add_files.py b/backend/apps/webui/internal/migrations/014_add_files.py new file mode 100644 index 0000000000..5e1acf0ad8 --- /dev/null +++ b/backend/apps/webui/internal/migrations/014_add_files.py @@ -0,0 +1,55 @@ +"""Peewee migrations -- 009_add_models.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.""" + + @migrator.create_model + class File(pw.Model): + id = pw.TextField(unique=True) + user_id = pw.TextField() + filename = pw.TextField() + meta = pw.TextField() + created_at = pw.BigIntegerField(null=False) + + class Meta: + table_name = "file" + + +def rollback(migrator: Migrator, database: pw.Database, *, fake=False): + """Write your rollback migrations here.""" + + migrator.remove_model("file") diff --git a/backend/apps/webui/internal/migrations/015_add_functions.py b/backend/apps/webui/internal/migrations/015_add_functions.py new file mode 100644 index 0000000000..8316a9333b --- /dev/null +++ b/backend/apps/webui/internal/migrations/015_add_functions.py @@ -0,0 +1,61 @@ +"""Peewee migrations -- 009_add_models.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.""" + + @migrator.create_model + class Function(pw.Model): + id = pw.TextField(unique=True) + user_id = pw.TextField() + + name = pw.TextField() + type = pw.TextField() + + content = pw.TextField() + meta = pw.TextField() + + created_at = pw.BigIntegerField(null=False) + updated_at = pw.BigIntegerField(null=False) + + class Meta: + table_name = "function" + + +def rollback(migrator: Migrator, database: pw.Database, *, fake=False): + """Write your rollback migrations here.""" + + migrator.remove_model("function") diff --git a/backend/apps/webui/internal/wrappers.py b/backend/apps/webui/internal/wrappers.py new file mode 100644 index 0000000000..2b5551ce2b --- /dev/null +++ b/backend/apps/webui/internal/wrappers.py @@ -0,0 +1,72 @@ +from contextvars import ContextVar +from peewee import * +from peewee import PostgresqlDatabase, InterfaceError as PeeWeeInterfaceError + +import logging +from playhouse.db_url import connect, parse +from playhouse.shortcuts import ReconnectMixin + +from config import SRC_LOG_LEVELS + +log = logging.getLogger(__name__) +log.setLevel(SRC_LOG_LEVELS["DB"]) + +db_state_default = {"closed": None, "conn": None, "ctx": None, "transactions": None} +db_state = ContextVar("db_state", default=db_state_default.copy()) + + +class PeeweeConnectionState(object): + def __init__(self, **kwargs): + super().__setattr__("_state", db_state) + super().__init__(**kwargs) + + def __setattr__(self, name, value): + self._state.get()[name] = value + + def __getattr__(self, name): + value = self._state.get()[name] + return value + + +class CustomReconnectMixin(ReconnectMixin): + reconnect_errors = ( + # psycopg2 + (OperationalError, "termin"), + (InterfaceError, "closed"), + # peewee + (PeeWeeInterfaceError, "closed"), + ) + + +class ReconnectingPostgresqlDatabase(CustomReconnectMixin, PostgresqlDatabase): + pass + + +def register_connection(db_url): + db = connect(db_url) + if isinstance(db, PostgresqlDatabase): + # Enable autoconnect for SQLite databases, managed by Peewee + db.autoconnect = True + db.reuse_if_open = True + log.info("Connected to PostgreSQL database") + + # Get the connection details + connection = parse(db_url) + + # Use our custom database class that supports reconnection + db = ReconnectingPostgresqlDatabase( + connection["database"], + user=connection["user"], + password=connection["password"], + host=connection["host"], + port=connection["port"], + ) + db.connect(reuse_if_open=True) + elif isinstance(db, SqliteDatabase): + # Enable autoconnect for SQLite databases, managed by Peewee + db.autoconnect = True + db.reuse_if_open = True + log.info("Connected to SQLite database") + else: + raise ValueError("Unsupported database connection") + return db diff --git a/backend/apps/webui/main.py b/backend/apps/webui/main.py index a9a187ee5f..4ec92d9f5e 100644 --- a/backend/apps/webui/main.py +++ b/backend/apps/webui/main.py @@ -14,7 +14,12 @@ from apps.webui.routers import ( configs, memories, utils, + files, + functions, ) +from apps.webui.models.functions import Functions +from apps.webui.utils import load_function_module_by_id + from config import ( WEBUI_BUILD_HASH, SHOW_ADMIN_DETAILS, @@ -27,6 +32,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, @@ -42,6 +48,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 @@ -59,7 +66,7 @@ app.state.config.ENABLE_COMMUNITY_SHARING = ENABLE_COMMUNITY_SHARING app.state.MODELS = {} app.state.TOOLS = {} - +app.state.FUNCTIONS = {} app.add_middleware( CORSMiddleware, @@ -69,17 +76,21 @@ app.add_middleware( allow_headers=["*"], ) + +app.include_router(configs.router, prefix="/configs", tags=["configs"]) app.include_router(auths.router, prefix="/auths", tags=["auths"]) app.include_router(users.router, prefix="/users", tags=["users"]) app.include_router(chats.router, prefix="/chats", tags=["chats"]) app.include_router(documents.router, prefix="/documents", tags=["documents"]) -app.include_router(tools.router, prefix="/tools", tags=["tools"]) app.include_router(models.router, prefix="/models", tags=["models"]) app.include_router(prompts.router, prefix="/prompts", tags=["prompts"]) -app.include_router(memories.router, prefix="/memories", tags=["memories"]) -app.include_router(configs.router, prefix="/configs", tags=["configs"]) +app.include_router(memories.router, prefix="/memories", tags=["memories"]) +app.include_router(files.router, prefix="/files", tags=["files"]) +app.include_router(tools.router, prefix="/tools", tags=["tools"]) +app.include_router(functions.router, prefix="/functions", tags=["functions"]) + app.include_router(utils.router, prefix="/utils", tags=["utils"]) @@ -91,3 +102,58 @@ async def get_status(): "default_models": app.state.config.DEFAULT_MODELS, "default_prompt_suggestions": app.state.config.DEFAULT_PROMPT_SUGGESTIONS, } + + +async def get_pipe_models(): + pipes = Functions.get_functions_by_type("pipe") + pipe_models = [] + + for pipe in pipes: + # Check if function is already loaded + if pipe.id not in app.state.FUNCTIONS: + function_module, function_type = load_function_module_by_id(pipe.id) + app.state.FUNCTIONS[pipe.id] = function_module + else: + function_module = app.state.FUNCTIONS[pipe.id] + + # Check if function is a manifold + if hasattr(function_module, "type"): + if function_module.type == "manifold": + manifold_pipes = [] + + # Check if pipes is a function or a list + if callable(function_module.pipes): + manifold_pipes = function_module.pipes() + else: + manifold_pipes = function_module.pipes + + for p in manifold_pipes: + manifold_pipe_id = f'{pipe.id}.{p["id"]}' + manifold_pipe_name = p["name"] + + if hasattr(function_module, "name"): + manifold_pipe_name = f"{pipe.name}{manifold_pipe_name}" + + pipe_models.append( + { + "id": manifold_pipe_id, + "name": manifold_pipe_name, + "object": "model", + "created": pipe.created_at, + "owned_by": "openai", + "pipe": {"type": pipe.type}, + } + ) + else: + pipe_models.append( + { + "id": pipe.id, + "name": pipe.name, + "object": "model", + "created": pipe.created_at, + "owned_by": "openai", + "pipe": {"type": "pipe"}, + } + ) + + return pipe_models diff --git a/backend/apps/webui/models/files.py b/backend/apps/webui/models/files.py new file mode 100644 index 0000000000..6459ad7250 --- /dev/null +++ b/backend/apps/webui/models/files.py @@ -0,0 +1,112 @@ +from pydantic import BaseModel +from peewee import * +from playhouse.shortcuts import model_to_dict +from typing import List, Union, Optional +import time +import logging +from apps.webui.internal.db import DB, JSONField + +import json + +from config import SRC_LOG_LEVELS + +log = logging.getLogger(__name__) +log.setLevel(SRC_LOG_LEVELS["MODELS"]) + +#################### +# Files DB Schema +#################### + + +class File(Model): + id = CharField(unique=True) + user_id = CharField() + filename = TextField() + meta = JSONField() + created_at = BigIntegerField() + + class Meta: + database = DB + + +class FileModel(BaseModel): + id: str + user_id: str + filename: str + meta: dict + created_at: int # timestamp in epoch + + +#################### +# Forms +#################### + + +class FileModelResponse(BaseModel): + id: str + user_id: str + filename: str + meta: dict + created_at: int # timestamp in epoch + + +class FileForm(BaseModel): + id: str + filename: str + meta: dict = {} + + +class FilesTable: + def __init__(self, db): + self.db = db + self.db.create_tables([File]) + + def insert_new_file(self, user_id: str, form_data: FileForm) -> Optional[FileModel]: + file = FileModel( + **{ + **form_data.model_dump(), + "user_id": user_id, + "created_at": int(time.time()), + } + ) + + try: + result = File.create(**file.model_dump()) + if result: + return file + else: + return None + except Exception as e: + print(f"Error creating tool: {e}") + return None + + def get_file_by_id(self, id: str) -> Optional[FileModel]: + try: + file = File.get(File.id == id) + return FileModel(**model_to_dict(file)) + except: + return None + + def get_files(self) -> List[FileModel]: + return [FileModel(**model_to_dict(file)) for file in File.select()] + + def delete_file_by_id(self, id: str) -> bool: + try: + query = File.delete().where((File.id == id)) + query.execute() # Remove the rows, return number of rows removed. + + return True + except: + return False + + def delete_all_files(self) -> bool: + try: + query = File.delete() + query.execute() # Remove the rows, return number of rows removed. + + return True + except: + return False + + +Files = FilesTable(DB) diff --git a/backend/apps/webui/models/functions.py b/backend/apps/webui/models/functions.py new file mode 100644 index 0000000000..f5fab34dbc --- /dev/null +++ b/backend/apps/webui/models/functions.py @@ -0,0 +1,141 @@ +from pydantic import BaseModel +from peewee import * +from playhouse.shortcuts import model_to_dict +from typing import List, Union, Optional +import time +import logging +from apps.webui.internal.db import DB, JSONField + +import json + +from config import SRC_LOG_LEVELS + +log = logging.getLogger(__name__) +log.setLevel(SRC_LOG_LEVELS["MODELS"]) + +#################### +# Functions DB Schema +#################### + + +class Function(Model): + id = CharField(unique=True) + user_id = CharField() + name = TextField() + type = TextField() + content = TextField() + meta = JSONField() + updated_at = BigIntegerField() + created_at = BigIntegerField() + + class Meta: + database = DB + + +class FunctionMeta(BaseModel): + description: Optional[str] = None + + +class FunctionModel(BaseModel): + id: str + user_id: str + name: str + type: str + content: str + meta: FunctionMeta + updated_at: int # timestamp in epoch + created_at: int # timestamp in epoch + + +#################### +# Forms +#################### + + +class FunctionResponse(BaseModel): + id: str + user_id: str + type: str + name: str + meta: FunctionMeta + updated_at: int # timestamp in epoch + created_at: int # timestamp in epoch + + +class FunctionForm(BaseModel): + id: str + name: str + content: str + meta: FunctionMeta + + +class FunctionsTable: + def __init__(self, db): + self.db = db + self.db.create_tables([Function]) + + def insert_new_function( + self, user_id: str, type: str, form_data: FunctionForm + ) -> Optional[FunctionModel]: + function = FunctionModel( + **{ + **form_data.model_dump(), + "user_id": user_id, + "type": type, + "updated_at": int(time.time()), + "created_at": int(time.time()), + } + ) + + try: + result = Function.create(**function.model_dump()) + if result: + return function + else: + return None + except Exception as e: + print(f"Error creating tool: {e}") + return None + + def get_function_by_id(self, id: str) -> Optional[FunctionModel]: + try: + function = Function.get(Function.id == id) + return FunctionModel(**model_to_dict(function)) + except: + return None + + def get_functions(self) -> List[FunctionModel]: + return [ + FunctionModel(**model_to_dict(function)) for function in Function.select() + ] + + def get_functions_by_type(self, type: str) -> List[FunctionModel]: + return [ + FunctionModel(**model_to_dict(function)) + for function in Function.select().where(Function.type == type) + ] + + def update_function_by_id(self, id: str, updated: dict) -> Optional[FunctionModel]: + try: + query = Function.update( + **updated, + updated_at=int(time.time()), + ).where(Function.id == id) + query.execute() + + function = Function.get(Function.id == id) + return FunctionModel(**model_to_dict(function)) + except: + return None + + def delete_function_by_id(self, id: str) -> bool: + try: + query = Function.delete().where((Function.id == id)) + query.execute() # Remove the rows, return number of rows removed. + + return True + except: + return False + + +Functions = FunctionsTable(DB) diff --git a/backend/apps/webui/models/users.py b/backend/apps/webui/models/users.py index d2bd27d999..1003ea8640 100644 --- a/backend/apps/webui/models/users.py +++ b/backend/apps/webui/models/users.py @@ -26,6 +26,7 @@ class User(Model): api_key = CharField(null=True, unique=True) settings = JSONField(null=True) + info = JSONField(null=True) oauth_sub = TextField(null=True, unique=True) @@ -52,6 +53,7 @@ class UserModel(BaseModel): api_key: Optional[str] = None settings: Optional[UserSettings] = None + info: Optional[dict] = None oauth_sub: Optional[str] = None diff --git a/backend/apps/webui/routers/auths.py b/backend/apps/webui/routers/auths.py index eb611d5148..1be79d259e 100644 --- a/backend/apps/webui/routers/auths.py +++ b/backend/apps/webui/routers/auths.py @@ -2,6 +2,7 @@ import logging from fastapi import Request, UploadFile, File from fastapi import Depends, HTTPException, status +from fastapi.responses import Response from fastapi import APIRouter from pydantic import BaseModel @@ -35,6 +36,7 @@ from constants import ERROR_MESSAGES, WEBHOOK_MESSAGES from config import ( WEBUI_AUTH, WEBUI_AUTH_TRUSTED_EMAIL_HEADER, + WEBUI_AUTH_TRUSTED_NAME_HEADER, ) router = APIRouter() @@ -45,7 +47,21 @@ router = APIRouter() @router.get("/", response_model=UserResponse) -async def get_session_user(user=Depends(get_current_user)): +async def get_session_user( + request: Request, response: Response, user=Depends(get_current_user) +): + token = create_token( + data={"id": user.id}, + expires_delta=parse_duration(request.app.state.config.JWT_EXPIRES_IN), + ) + + # Set the cookie token + response.set_cookie( + key="token", + value=token, + httponly=True, # Ensures the cookie is not accessible via JavaScript + ) + return { "id": user.id, "email": user.email, @@ -106,17 +122,22 @@ async def update_password( @router.post("/signin", response_model=SigninResponse) -async def signin(request: Request, form_data: SigninForm): +async def signin(request: Request, response: Response, form_data: SigninForm): if WEBUI_AUTH_TRUSTED_EMAIL_HEADER: if WEBUI_AUTH_TRUSTED_EMAIL_HEADER not in request.headers: 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) @@ -145,6 +166,13 @@ async def signin(request: Request, form_data: SigninForm): expires_delta=parse_duration(request.app.state.config.JWT_EXPIRES_IN), ) + # Set the cookie token + response.set_cookie( + key="token", + value=token, + httponly=True, # Ensures the cookie is not accessible via JavaScript + ) + return { "token": token, "token_type": "Bearer", @@ -164,7 +192,7 @@ async def signin(request: Request, form_data: SigninForm): @router.post("/signup", response_model=SigninResponse) -async def signup(request: Request, form_data: SignupForm): +async def signup(request: Request, response: Response, form_data: SignupForm): if not request.app.state.config.ENABLE_SIGNUP and WEBUI_AUTH: raise HTTPException( status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.ACCESS_PROHIBITED @@ -200,6 +228,13 @@ async def signup(request: Request, form_data: SignupForm): ) # response.set_cookie(key='token', value=token, httponly=True) + # Set the cookie token + response.set_cookie( + key="token", + value=token, + httponly=True, # Ensures the cookie is not accessible via JavaScript + ) + if request.app.state.config.WEBHOOK_URL: post_webhook( request.app.state.config.WEBHOOK_URL, diff --git a/backend/apps/webui/routers/files.py b/backend/apps/webui/routers/files.py new file mode 100644 index 0000000000..707dce9d3d --- /dev/null +++ b/backend/apps/webui/routers/files.py @@ -0,0 +1,219 @@ +from fastapi import ( + Depends, + FastAPI, + HTTPException, + status, + Request, + UploadFile, + File, + Form, +) + + +from datetime import datetime, timedelta +from typing import List, Union, Optional +from pathlib import Path + +from fastapi import APIRouter +from fastapi.responses import StreamingResponse, JSONResponse, FileResponse + +from pydantic import BaseModel +import json + +from apps.webui.models.files import ( + Files, + FileForm, + FileModel, + FileModelResponse, +) +from utils.utils import get_verified_user, get_admin_user +from constants import ERROR_MESSAGES + +from importlib import util +import os +import uuid +import os, shutil, logging, re + + +from config import SRC_LOG_LEVELS, UPLOAD_DIR + + +log = logging.getLogger(__name__) +log.setLevel(SRC_LOG_LEVELS["MODELS"]) + + +router = APIRouter() + +############################ +# Upload File +############################ + + +@router.post("/") +def upload_file( + file: UploadFile = File(...), + user=Depends(get_verified_user), +): + log.info(f"file.content_type: {file.content_type}") + try: + unsanitized_filename = file.filename + filename = os.path.basename(unsanitized_filename) + + # replace filename with uuid + id = str(uuid.uuid4()) + filename = f"{id}_{filename}" + file_path = f"{UPLOAD_DIR}/{filename}" + + contents = file.file.read() + with open(file_path, "wb") as f: + f.write(contents) + f.close() + + file = Files.insert_new_file( + user.id, + FileForm( + **{ + "id": id, + "filename": filename, + "meta": { + "content_type": file.content_type, + "size": len(contents), + "path": file_path, + }, + } + ), + ) + + if file: + return file + else: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT("Error uploading file"), + ) + + except Exception as e: + log.exception(e) + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT(e), + ) + + +############################ +# List Files +############################ + + +@router.get("/", response_model=List[FileModel]) +async def list_files(user=Depends(get_verified_user)): + files = Files.get_files() + return files + + +############################ +# Delete All Files +############################ + + +@router.delete("/all") +async def delete_all_files(user=Depends(get_admin_user)): + result = Files.delete_all_files() + + if result: + folder = f"{UPLOAD_DIR}" + try: + # Check if the directory exists + if os.path.exists(folder): + # Iterate over all the files and directories in the specified directory + for filename in os.listdir(folder): + file_path = os.path.join(folder, filename) + try: + if os.path.isfile(file_path) or os.path.islink(file_path): + os.unlink(file_path) # Remove the file or link + elif os.path.isdir(file_path): + shutil.rmtree(file_path) # Remove the directory + except Exception as e: + print(f"Failed to delete {file_path}. Reason: {e}") + else: + print(f"The directory {folder} does not exist") + except Exception as e: + print(f"Failed to process the directory {folder}. Reason: {e}") + + return {"message": "All files deleted successfully"} + else: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT("Error deleting files"), + ) + + +############################ +# Get File By Id +############################ + + +@router.get("/{id}", response_model=Optional[FileModel]) +async def get_file_by_id(id: str, user=Depends(get_verified_user)): + file = Files.get_file_by_id(id) + + if file: + return file + else: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail=ERROR_MESSAGES.NOT_FOUND, + ) + + +############################ +# Get File Content By Id +############################ + + +@router.get("/{id}/content", response_model=Optional[FileModel]) +async def get_file_content_by_id(id: str, user=Depends(get_verified_user)): + file = Files.get_file_by_id(id) + + if file: + file_path = Path(file.meta["path"]) + + # Check if the file already exists in the cache + if file_path.is_file(): + print(f"file_path: {file_path}") + return FileResponse(file_path) + else: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail=ERROR_MESSAGES.NOT_FOUND, + ) + else: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail=ERROR_MESSAGES.NOT_FOUND, + ) + + +############################ +# Delete File By Id +############################ + + +@router.delete("/{id}") +async def delete_file_by_id(id: str, user=Depends(get_verified_user)): + file = Files.get_file_by_id(id) + + if file: + result = Files.delete_file_by_id(id) + if result: + return {"message": "File deleted successfully"} + else: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT("Error deleting file"), + ) + else: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail=ERROR_MESSAGES.NOT_FOUND, + ) diff --git a/backend/apps/webui/routers/functions.py b/backend/apps/webui/routers/functions.py new file mode 100644 index 0000000000..ea5fde3363 --- /dev/null +++ b/backend/apps/webui/routers/functions.py @@ -0,0 +1,180 @@ +from fastapi import Depends, FastAPI, HTTPException, status, Request +from datetime import datetime, timedelta +from typing import List, Union, Optional + +from fastapi import APIRouter +from pydantic import BaseModel +import json + +from apps.webui.models.functions import ( + Functions, + FunctionForm, + FunctionModel, + FunctionResponse, +) +from apps.webui.utils import load_function_module_by_id +from utils.utils import get_verified_user, get_admin_user +from constants import ERROR_MESSAGES + +from importlib import util +import os +from pathlib import Path + +from config import DATA_DIR, CACHE_DIR, FUNCTIONS_DIR + + +router = APIRouter() + +############################ +# GetFunctions +############################ + + +@router.get("/", response_model=List[FunctionResponse]) +async def get_functions(user=Depends(get_verified_user)): + return Functions.get_functions() + + +############################ +# ExportFunctions +############################ + + +@router.get("/export", response_model=List[FunctionModel]) +async def get_functions(user=Depends(get_admin_user)): + return Functions.get_functions() + + +############################ +# CreateNewFunction +############################ + + +@router.post("/create", response_model=Optional[FunctionResponse]) +async def create_new_function( + request: Request, form_data: FunctionForm, user=Depends(get_admin_user) +): + if not form_data.id.isidentifier(): + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail="Only alphanumeric characters and underscores are allowed in the id", + ) + + form_data.id = form_data.id.lower() + + function = Functions.get_function_by_id(form_data.id) + if function == None: + function_path = os.path.join(FUNCTIONS_DIR, f"{form_data.id}.py") + try: + with open(function_path, "w") as function_file: + function_file.write(form_data.content) + + function_module, function_type = load_function_module_by_id(form_data.id) + + FUNCTIONS = request.app.state.FUNCTIONS + FUNCTIONS[form_data.id] = function_module + + function = Functions.insert_new_function(user.id, function_type, form_data) + + function_cache_dir = Path(CACHE_DIR) / "functions" / form_data.id + function_cache_dir.mkdir(parents=True, exist_ok=True) + + if function: + return function + else: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT("Error creating function"), + ) + except Exception as e: + print(e) + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT(e), + ) + else: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.ID_TAKEN, + ) + + +############################ +# GetFunctionById +############################ + + +@router.get("/id/{id}", response_model=Optional[FunctionModel]) +async def get_function_by_id(id: str, user=Depends(get_admin_user)): + function = Functions.get_function_by_id(id) + + if function: + return function + else: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail=ERROR_MESSAGES.NOT_FOUND, + ) + + +############################ +# UpdateFunctionById +############################ + + +@router.post("/id/{id}/update", response_model=Optional[FunctionModel]) +async def update_toolkit_by_id( + request: Request, id: str, form_data: FunctionForm, user=Depends(get_admin_user) +): + function_path = os.path.join(FUNCTIONS_DIR, f"{id}.py") + + try: + with open(function_path, "w") as function_file: + function_file.write(form_data.content) + + function_module, function_type = load_function_module_by_id(id) + + FUNCTIONS = request.app.state.FUNCTIONS + FUNCTIONS[id] = function_module + + updated = {**form_data.model_dump(exclude={"id"}), "type": function_type} + print(updated) + + function = Functions.update_function_by_id(id, updated) + + if function: + return function + else: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT("Error updating function"), + ) + + except Exception as e: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ERROR_MESSAGES.DEFAULT(e), + ) + + +############################ +# DeleteFunctionById +############################ + + +@router.delete("/id/{id}/delete", response_model=bool) +async def delete_function_by_id( + request: Request, id: str, user=Depends(get_admin_user) +): + result = Functions.delete_function_by_id(id) + + if result: + FUNCTIONS = request.app.state.FUNCTIONS + if id in FUNCTIONS: + del FUNCTIONS[id] + + # delete the function file + function_path = os.path.join(FUNCTIONS_DIR, f"{id}.py") + os.remove(function_path) + + return result diff --git a/backend/apps/webui/routers/tools.py b/backend/apps/webui/routers/tools.py index b68ed32ee0..49ddf4af07 100644 --- a/backend/apps/webui/routers/tools.py +++ b/backend/apps/webui/routers/tools.py @@ -15,8 +15,9 @@ from constants import ERROR_MESSAGES from importlib import util import os +from pathlib import Path -from config import DATA_DIR +from config import DATA_DIR, CACHE_DIR TOOLS_DIR = f"{DATA_DIR}/tools" @@ -79,6 +80,9 @@ async def create_new_toolkit( specs = get_tools_specs(TOOLS[form_data.id]) toolkit = Tools.insert_new_tool(user.id, form_data, specs) + tool_cache_dir = Path(CACHE_DIR) / "tools" / form_data.id + tool_cache_dir.mkdir(parents=True, exist_ok=True) + if toolkit: return toolkit else: diff --git a/backend/apps/webui/routers/users.py b/backend/apps/webui/routers/users.py index eccafde103..270d72a238 100644 --- a/backend/apps/webui/routers/users.py +++ b/backend/apps/webui/routers/users.py @@ -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 ############################ diff --git a/backend/apps/webui/utils.py b/backend/apps/webui/utils.py index 19a8615bc3..3e075a8a8f 100644 --- a/backend/apps/webui/utils.py +++ b/backend/apps/webui/utils.py @@ -1,7 +1,7 @@ from importlib import util import os -from config import TOOLS_DIR +from config import TOOLS_DIR, FUNCTIONS_DIR def load_toolkit_module_by_id(toolkit_id): @@ -21,3 +21,25 @@ def load_toolkit_module_by_id(toolkit_id): # Move the file to the error folder os.rename(toolkit_path, f"{toolkit_path}.error") raise e + + +def load_function_module_by_id(function_id): + function_path = os.path.join(FUNCTIONS_DIR, f"{function_id}.py") + + spec = util.spec_from_file_location(function_id, function_path) + module = util.module_from_spec(spec) + + try: + spec.loader.exec_module(module) + print(f"Loaded module: {module.__name__}") + if hasattr(module, "Pipe"): + return module.Pipe(), "pipe" + elif hasattr(module, "Filter"): + return module.Filter(), "filter" + else: + raise Exception("No Function class found") + except Exception as e: + print(f"Error loading module: {function_id}") + # Move the file to the error folder + os.rename(function_path, f"{function_path}.error") + raise e diff --git a/backend/config.py b/backend/config.py index 21287ae72f..71f0dd0042 100644 --- a/backend/config.py +++ b/backend/config.py @@ -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") ) @@ -505,6 +506,14 @@ TOOLS_DIR = os.getenv("TOOLS_DIR", f"{DATA_DIR}/tools") Path(TOOLS_DIR).mkdir(parents=True, exist_ok=True) +#################################### +# Functions DIR +#################################### + +FUNCTIONS_DIR = os.getenv("FUNCTIONS_DIR", f"{DATA_DIR}/functions") +Path(FUNCTIONS_DIR).mkdir(parents=True, exist_ok=True) + + #################################### # LITELLM_CONFIG #################################### @@ -554,7 +563,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") @@ -1034,6 +1050,18 @@ RAG_WEB_SEARCH_ENGINE = PersistentConfig( os.getenv("RAG_WEB_SEARCH_ENGINE", ""), ) +# You can provide a list of your own websites to filter after performing a web search. +# This ensures the highest level of safety and reliability of the information sources. +RAG_WEB_SEARCH_DOMAIN_FILTER_LIST = PersistentConfig( + "RAG_WEB_SEARCH_DOMAIN_FILTER_LIST", + "rag.rag.web.search.domain.filter_list", + [ + # "wikipedia.com", + # "wikimedia.org", + # "wikidata.org", + ], +) + SEARXNG_QUERY_URL = PersistentConfig( "SEARXNG_QUERY_URL", "rag.web.search.searxng_query_url", @@ -1139,6 +1167,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", diff --git a/backend/main.py b/backend/main.py index 5076e91c50..2e1d2c83f2 100644 --- a/backend/main.py +++ b/backend/main.py @@ -15,9 +15,11 @@ import requests import mimetypes import shutil import os +import uuid import inspect import asyncio +from fastapi.concurrency import run_in_threadpool from fastapi import FastAPI, Request, Depends, status, UploadFile, File, Form from fastapi.staticfiles import StaticFiles from fastapi.responses import JSONResponse @@ -46,16 +48,19 @@ from apps.openai.main import ( from apps.audio.main import app as audio_app from apps.images.main import app as images_app from apps.rag.main import app as rag_app -from apps.webui.main import app as webui_app +from apps.webui.main import app as webui_app, get_pipe_models from pydantic import BaseModel -from typing import List, Optional +from typing import List, Optional, Iterator, Generator, Union from apps.webui.models.auths import Auths from apps.webui.models.models import Models, ModelModel from apps.webui.models.tools import Tools +from apps.webui.models.functions import Functions from apps.webui.models.users import Users + +from apps.webui.utils import load_toolkit_module_by_id, load_function_module_by_id from apps.webui.utils import load_toolkit_module_by_id from utils.misc import parse_duration @@ -72,7 +77,11 @@ from utils.task import ( search_query_generation_template, tools_function_calling_generation_template, ) -from utils.misc import get_last_user_message, add_or_update_system_message +from utils.misc import ( + get_last_user_message, + add_or_update_system_message, + stream_message_template, +) from apps.rag.utils import get_rag_context, rag_template @@ -85,6 +94,7 @@ from config import ( VERSION, CHANGELOG, FRONTEND_BUILD_DIR, + UPLOAD_DIR, CACHE_DIR, STATIC_DIR, ENABLE_OPENAI_API, @@ -184,7 +194,16 @@ app.state.MODELS = {} origins = ["*"] -async def get_function_call_response(messages, tool_id, template, task_model_id, user): +################################## +# +# ChatCompletion Middleware +# +################################## + + +async def get_function_call_response( + messages, files, tool_id, template, task_model_id, user +): tool = Tools.get_tool_by_id(tool_id) tools_specs = json.dumps(tool.specs, indent=2) content = tools_function_calling_generation_template(template, tools_specs) @@ -222,9 +241,7 @@ async def get_function_call_response(messages, tool_id, template, task_model_id, response = None try: if model["owned_by"] == "ollama": - response = await generate_ollama_chat_completion( - OpenAIChatCompletionForm(**payload), user=user - ) + response = await generate_ollama_chat_completion(payload, user=user) else: response = await generate_openai_chat_completion(payload, user=user) @@ -247,6 +264,7 @@ async def get_function_call_response(messages, tool_id, template, task_model_id, result = json.loads(content) print(result) + citation = None # Call the function if "name" in result: if tool_id in webui_app.state.TOOLS: @@ -255,76 +273,170 @@ async def get_function_call_response(messages, tool_id, template, task_model_id, toolkit_module = load_toolkit_module_by_id(tool_id) webui_app.state.TOOLS[tool_id] = toolkit_module + file_handler = False + # check if toolkit_module has file_handler self variable + if hasattr(toolkit_module, "file_handler"): + file_handler = True + print("file_handler: ", file_handler) + function = getattr(toolkit_module, result["name"]) function_result = None try: # Get the signature of the function sig = inspect.signature(function) - # Check if '__user__' is a parameter of the function + params = result["parameters"] + if "__user__" in sig.parameters: # Call the function with the '__user__' parameter included - function_result = function( - **{ - **result["parameters"], - "__user__": { - "id": user.id, - "email": user.email, - "name": user.name, - "role": user.role, - }, - } - ) + params = { + **params, + "__user__": { + "id": user.id, + "email": user.email, + "name": user.name, + "role": user.role, + }, + } + + if "__messages__" in sig.parameters: + # Call the function with the '__messages__' parameter included + params = { + **params, + "__messages__": messages, + } + + if "__files__" in sig.parameters: + # Call the function with the '__files__' parameter included + params = { + **params, + "__files__": files, + } + + if "__model__" in sig.parameters: + # Call the function with the '__model__' parameter included + params = { + **params, + "__model__": model, + } + + if "__id__" in sig.parameters: + # Call the function with the '__id__' parameter included + params = { + **params, + "__id__": tool_id, + } + + if inspect.iscoroutinefunction(function): + function_result = await function(**params) else: - # Call the function without modifying the parameters - function_result = function(**result["parameters"]) + function_result = function(**params) + + if hasattr(toolkit_module, "citation") and toolkit_module.citation: + citation = { + "source": {"name": f"TOOL:{tool.name}/{result['name']}"}, + "document": [function_result], + "metadata": [{"source": result["name"]}], + } except Exception as e: print(e) # Add the function result to the system prompt - if function_result: - return function_result + if function_result is not None: + return function_result, citation, file_handler except Exception as e: print(f"Error: {e}") - return None + return None, None, False class ChatCompletionMiddleware(BaseHTTPMiddleware): async def dispatch(self, request: Request, call_next): - return_citations = False + data_items = [] - if request.method == "POST" and ( - "/ollama/api/chat" in request.url.path - or "/chat/completions" in request.url.path + show_citations = False + citations = [] + + if request.method == "POST" and any( + endpoint in request.url.path + for endpoint in ["/ollama/api/chat", "/chat/completions"] ): log.debug(f"request.url.path: {request.url.path}") # Read the original request body body = await request.body() - # Decode body to string body_str = body.decode("utf-8") - # Parse string to JSON data = json.loads(body_str) if body_str else {} user = get_current_user( - get_http_authorization_cred(request.headers.get("Authorization")) + request, + get_http_authorization_cred(request.headers.get("Authorization")), ) - - # Remove the citations from the body - return_citations = data.get("citations", False) - if "citations" in data: + # Flag to skip RAG completions if file_handler is present in tools/functions + skip_files = False + if data.get("citations"): + show_citations = True del data["citations"] - # Set the task model - task_model_id = data["model"] - if task_model_id not in app.state.MODELS: + model_id = data["model"] + if model_id not in app.state.MODELS: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail="Model not found", ) + model = app.state.MODELS[model_id] - # Check if the user has a custom task model - # If the user has a custom task model, use that model + # Check if the model has any filters + if "info" in model and "meta" in model["info"]: + for filter_id in model["info"]["meta"].get("filterIds", []): + filter = Functions.get_function_by_id(filter_id) + if filter: + if filter_id in webui_app.state.FUNCTIONS: + function_module = webui_app.state.FUNCTIONS[filter_id] + else: + function_module, function_type = load_function_module_by_id( + filter_id + ) + webui_app.state.FUNCTIONS[filter_id] = function_module + + # Check if the function has a file_handler variable + if hasattr(function_module, "file_handler"): + skip_files = function_module.file_handler + + try: + if hasattr(function_module, "inlet"): + inlet = function_module.inlet + + if inspect.iscoroutinefunction(inlet): + data = await inlet( + data, + { + "id": user.id, + "email": user.email, + "name": user.name, + "role": user.role, + }, + ) + else: + data = inlet( + data, + { + "id": user.id, + "email": user.email, + "name": user.name, + "role": user.role, + }, + ) + + except Exception as e: + print(f"Error: {e}") + return JSONResponse( + status_code=status.HTTP_400_BAD_REQUEST, + content={"detail": str(e)}, + ) + + # Set the task model + task_model_id = data["model"] + # Check if the user has a custom task model and use that model if app.state.MODELS[task_model_id]["owned_by"] == "ollama": if ( app.state.config.TASK_MODEL @@ -347,55 +459,71 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): for tool_id in data["tool_ids"]: print(tool_id) try: - response = await get_function_call_response( - messages=data["messages"], - tool_id=tool_id, - template=app.state.config.TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE, - task_model_id=task_model_id, - user=user, + response, citation, file_handler = ( + await get_function_call_response( + messages=data["messages"], + files=data.get("files", []), + tool_id=tool_id, + template=app.state.config.TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE, + task_model_id=task_model_id, + user=user, + ) ) - if response: + print(file_handler) + if isinstance(response, str): context += ("\n" if context != "" else "") + response + + if citation: + citations.append(citation) + show_citations = True + + if file_handler: + skip_files = True + except Exception as e: print(f"Error: {e}") del data["tool_ids"] print(f"tool_context: {context}") - # If docs field is present, generate RAG completions - if "docs" in data: - data = {**data} - rag_context, citations = get_rag_context( - docs=data["docs"], - messages=data["messages"], - embedding_function=rag_app.state.EMBEDDING_FUNCTION, - k=rag_app.state.config.TOP_K, - reranking_function=rag_app.state.sentence_transformer_rf, - r=rag_app.state.config.RELEVANCE_THRESHOLD, - hybrid_search=rag_app.state.config.ENABLE_RAG_HYBRID_SEARCH, - ) + # If files field is present, generate RAG completions + # If skip_files is True, skip the RAG completions + if "files" in data: + if not skip_files: + data = {**data} + rag_context, rag_citations = get_rag_context( + files=data["files"], + messages=data["messages"], + embedding_function=rag_app.state.EMBEDDING_FUNCTION, + k=rag_app.state.config.TOP_K, + reranking_function=rag_app.state.sentence_transformer_rf, + r=rag_app.state.config.RELEVANCE_THRESHOLD, + hybrid_search=rag_app.state.config.ENABLE_RAG_HYBRID_SEARCH, + ) + if rag_context: + context += ("\n" if context != "" else "") + rag_context - if rag_context: - context += ("\n" if context != "" else "") + rag_context + log.debug(f"rag_context: {rag_context}, citations: {citations}") - del data["docs"] + if rag_citations: + citations.extend(rag_citations) - log.debug(f"rag_context: {rag_context}, citations: {citations}") + del data["files"] + + if show_citations and len(citations) > 0: + data_items.append({"citations": citations}) if context != "": system_prompt = rag_template( rag_app.state.config.RAG_TEMPLATE, context, prompt ) - print(system_prompt) - data["messages"] = add_or_update_system_message( - f"\n{system_prompt}", data["messages"] + system_prompt, data["messages"] ) modified_body_bytes = json.dumps(data).encode("utf-8") - # Replace the request body with the modified one request._body = modified_body_bytes # Set custom header to ensure content-length matches new body length @@ -408,43 +536,54 @@ class ChatCompletionMiddleware(BaseHTTPMiddleware): ], ] - response = await call_next(request) - - if return_citations: - # Inject the citations into the response + response = await call_next(request) if isinstance(response, StreamingResponse): # If it's a streaming response, inject it as SSE event or NDJSON line content_type = response.headers.get("Content-Type") if "text/event-stream" in content_type: return StreamingResponse( - self.openai_stream_wrapper(response.body_iterator, citations), + self.openai_stream_wrapper(response.body_iterator, data_items), ) if "application/x-ndjson" in content_type: return StreamingResponse( - self.ollama_stream_wrapper(response.body_iterator, citations), + self.ollama_stream_wrapper(response.body_iterator, data_items), ) + else: + return response + # If it's not a chat completion request, just pass it through + response = await call_next(request) return response async def _receive(self, body: bytes): return {"type": "http.request", "body": body, "more_body": False} - async def openai_stream_wrapper(self, original_generator, citations): - yield f"data: {json.dumps({'citations': citations})}\n\n" + async def openai_stream_wrapper(self, original_generator, data_items): + for item in data_items: + yield f"data: {json.dumps(item)}\n\n" + async for data in original_generator: yield data - async def ollama_stream_wrapper(self, original_generator, citations): - yield f"{json.dumps({'citations': citations})}\n" + async def ollama_stream_wrapper(self, original_generator, data_items): + for item in data_items: + yield f"{json.dumps(item)}\n" + async for data in original_generator: yield data app.add_middleware(ChatCompletionMiddleware) +################################## +# +# Pipeline Middleware +# +################################## + def filter_pipeline(payload, user): - user = {"id": user.id, "name": user.name, "role": user.role} + user = {"id": user.id, "email": user.email, "name": user.name, "role": user.role} model_id = payload["model"] filters = [ model @@ -532,7 +671,8 @@ class PipelineMiddleware(BaseHTTPMiddleware): data = json.loads(body_str) if body_str else {} user = get_current_user( - get_http_authorization_cred(request.headers.get("Authorization")) + request, + get_http_authorization_cred(request.headers.get("Authorization")), ) try: @@ -600,7 +740,6 @@ async def update_embedding_function(request: Request, call_next): app.mount("/ws", socket_app) - app.mount("/ollama", ollama_app) app.mount("/openai", openai_app) @@ -614,17 +753,18 @@ webui_app.state.EMBEDDING_FUNCTION = rag_app.state.EMBEDDING_FUNCTION async def get_all_models(): + pipe_models = [] openai_models = [] ollama_models = [] + pipe_models = await get_pipe_models() + if app.state.config.ENABLE_OPENAI_API: openai_models = await get_openai_models() - openai_models = openai_models["data"] if app.state.config.ENABLE_OLLAMA_API: ollama_models = await get_ollama_models() - ollama_models = [ { "id": model["model"], @@ -637,9 +777,9 @@ async def get_all_models(): for model in ollama_models["models"] ] - models = openai_models + ollama_models - custom_models = Models.get_all_models() + models = pipe_models + openai_models + ollama_models + custom_models = Models.get_all_models() for custom_model in custom_models: if custom_model.base_model_id == None: for model in models: @@ -702,6 +842,253 @@ async def get_models(user=Depends(get_verified_user)): return {"data": models} +@app.post("/api/chat/completions") +async def generate_chat_completions(form_data: dict, user=Depends(get_verified_user)): + model_id = form_data["model"] + if model_id not in app.state.MODELS: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail="Model not found", + ) + + model = app.state.MODELS[model_id] + print(model) + + pipe = model.get("pipe") + if pipe: + form_data["user"] = { + "id": user.id, + "email": user.email, + "name": user.name, + "role": user.role, + } + + async def job(): + pipe_id = form_data["model"] + if "." in pipe_id: + pipe_id, sub_pipe_id = pipe_id.split(".", 1) + print(pipe_id) + + pipe = webui_app.state.FUNCTIONS[pipe_id].pipe + if form_data["stream"]: + + async def stream_content(): + if inspect.iscoroutinefunction(pipe): + res = await pipe(body=form_data) + else: + res = pipe(body=form_data) + + if isinstance(res, str): + message = stream_message_template(form_data["model"], res) + yield f"data: {json.dumps(message)}\n\n" + + if isinstance(res, Iterator): + for line in res: + if isinstance(line, BaseModel): + line = line.model_dump_json() + line = f"data: {line}" + try: + line = line.decode("utf-8") + except: + pass + + if line.startswith("data:"): + yield f"{line}\n\n" + else: + line = stream_message_template(form_data["model"], line) + yield f"data: {json.dumps(line)}\n\n" + + if isinstance(res, str) or isinstance(res, Generator): + finish_message = { + "id": f"{form_data['model']}-{str(uuid.uuid4())}", + "object": "chat.completion.chunk", + "created": int(time.time()), + "model": form_data["model"], + "choices": [ + { + "index": 0, + "delta": {}, + "logprobs": None, + "finish_reason": "stop", + } + ], + } + + yield f"data: {json.dumps(finish_message)}\n\n" + yield f"data: [DONE]" + + return StreamingResponse( + stream_content(), media_type="text/event-stream" + ) + else: + if inspect.iscoroutinefunction(pipe): + res = await pipe(body=form_data) + else: + res = pipe(body=form_data) + + if isinstance(res, dict): + return res + elif isinstance(res, BaseModel): + return res.model_dump() + else: + message = "" + if isinstance(res, str): + message = res + if isinstance(res, Generator): + for stream in res: + message = f"{message}{stream}" + + return { + "id": f"{form_data['model']}-{str(uuid.uuid4())}", + "object": "chat.completion", + "created": int(time.time()), + "model": form_data["model"], + "choices": [ + { + "index": 0, + "message": { + "role": "assistant", + "content": message, + }, + "logprobs": None, + "finish_reason": "stop", + } + ], + } + + return await job() + if model["owned_by"] == "ollama": + return await generate_ollama_chat_completion(form_data, user=user) + else: + return await generate_openai_chat_completion(form_data, user=user) + + +@app.post("/api/chat/completed") +async def chat_completed(form_data: dict, user=Depends(get_verified_user)): + data = form_data + model_id = data["model"] + if model_id not in app.state.MODELS: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail="Model not found", + ) + model = app.state.MODELS[model_id] + + filters = [ + model + for model in app.state.MODELS.values() + if "pipeline" in model + and "type" in model["pipeline"] + and model["pipeline"]["type"] == "filter" + and ( + model["pipeline"]["pipelines"] == ["*"] + or any( + model_id == target_model_id + for target_model_id in model["pipeline"]["pipelines"] + ) + ) + ] + + sorted_filters = sorted(filters, key=lambda x: x["pipeline"]["priority"]) + if "pipeline" in model: + sorted_filters = [model] + sorted_filters + + for filter in sorted_filters: + r = None + try: + urlIdx = filter["urlIdx"] + + url = openai_app.state.config.OPENAI_API_BASE_URLS[urlIdx] + key = openai_app.state.config.OPENAI_API_KEYS[urlIdx] + + if key != "": + headers = {"Authorization": f"Bearer {key}"} + r = requests.post( + f"{url}/{filter['id']}/filter/outlet", + headers=headers, + json={ + "user": {"id": user.id, "name": user.name, "role": user.role}, + "body": data, + }, + ) + + r.raise_for_status() + data = r.json() + except Exception as e: + # Handle connection error here + print(f"Connection error: {e}") + + if r is not None: + try: + res = r.json() + if "detail" in res: + return JSONResponse( + status_code=r.status_code, + content=res, + ) + except: + pass + + else: + pass + + # Check if the model has any filters + if "info" in model and "meta" in model["info"]: + for filter_id in model["info"]["meta"].get("filterIds", []): + filter = Functions.get_function_by_id(filter_id) + if filter: + if filter_id in webui_app.state.FUNCTIONS: + function_module = webui_app.state.FUNCTIONS[filter_id] + else: + function_module, function_type = load_function_module_by_id( + filter_id + ) + webui_app.state.FUNCTIONS[filter_id] = function_module + + try: + if hasattr(function_module, "outlet"): + outlet = function_module.outlet + if inspect.iscoroutinefunction(outlet): + data = await outlet( + data, + { + "id": user.id, + "email": user.email, + "name": user.name, + "role": user.role, + }, + ) + else: + data = outlet( + data, + { + "id": user.id, + "email": user.email, + "name": user.name, + "role": user.role, + }, + ) + + except Exception as e: + print(f"Error: {e}") + return JSONResponse( + status_code=status.HTTP_400_BAD_REQUEST, + content={"detail": str(e)}, + ) + + return data + + +################################## +# +# Task Endpoints +# +################################## + + +# TODO: Refactor task API endpoints below into a separate file + + @app.get("/api/task/config") async def get_task_config(user=Depends(get_verified_user)): return { @@ -780,7 +1167,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 = { @@ -792,7 +1184,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) @@ -803,9 +1195,7 @@ async def generate_title(form_data: dict, user=Depends(get_verified_user)): ) if model["owned_by"] == "ollama": - return await generate_ollama_chat_completion( - OpenAIChatCompletionForm(**payload), user=user - ) + return await generate_ollama_chat_completion(payload, user=user) else: return await generate_openai_chat_completion(payload, user=user) @@ -846,7 +1236,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 = { @@ -868,9 +1258,7 @@ async def generate_search_query(form_data: dict, user=Depends(get_verified_user) ) if model["owned_by"] == "ollama": - return await generate_ollama_chat_completion( - OpenAIChatCompletionForm(**payload), user=user - ) + return await generate_ollama_chat_completion(payload, user=user) else: return await generate_openai_chat_completion(payload, user=user) @@ -909,7 +1297,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 = { @@ -921,7 +1314,7 @@ Message: """{{prompt}}""" "task": True, } - print(payload) + log.debug(payload) try: payload = filter_pipeline(payload, user) @@ -932,9 +1325,7 @@ Message: """{{prompt}}""" ) if model["owned_by"] == "ollama": - return await generate_ollama_chat_completion( - OpenAIChatCompletionForm(**payload), user=user - ) + return await generate_ollama_chat_completion(payload, user=user) else: return await generate_openai_chat_completion(payload, user=user) @@ -967,8 +1358,13 @@ async def get_tools_function_calling(form_data: dict, user=Depends(get_verified_ template = app.state.config.TOOLS_FUNCTION_CALLING_PROMPT_TEMPLATE try: - context = await get_function_call_response( - form_data["messages"], form_data["tool_id"], template, model_id, user + context, citation, file_handler = await get_function_call_response( + form_data["messages"], + form_data.get("files", []), + form_data["tool_id"], + template, + model_id, + user, ) return context except Exception as e: @@ -978,94 +1374,14 @@ async def get_tools_function_calling(form_data: dict, user=Depends(get_verified_ ) -@app.post("/api/chat/completions") -async def generate_chat_completions(form_data: dict, user=Depends(get_verified_user)): - model_id = form_data["model"] - if model_id not in app.state.MODELS: - raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, - detail="Model not found", - ) - - model = app.state.MODELS[model_id] - print(model) - - if model["owned_by"] == "ollama": - return await generate_ollama_chat_completion( - OpenAIChatCompletionForm(**form_data), user=user - ) - else: - return await generate_openai_chat_completion(form_data, user=user) +################################## +# +# Pipelines Endpoints +# +################################## -@app.post("/api/chat/completed") -async def chat_completed(form_data: dict, user=Depends(get_verified_user)): - data = form_data - model_id = data["model"] - - filters = [ - model - for model in app.state.MODELS.values() - if "pipeline" in model - and "type" in model["pipeline"] - and model["pipeline"]["type"] == "filter" - and ( - model["pipeline"]["pipelines"] == ["*"] - or any( - model_id == target_model_id - for target_model_id in model["pipeline"]["pipelines"] - ) - ) - ] - sorted_filters = sorted(filters, key=lambda x: x["pipeline"]["priority"]) - - print(model_id) - - if model_id in app.state.MODELS: - model = app.state.MODELS[model_id] - if "pipeline" in model: - sorted_filters = [model] + sorted_filters - - for filter in sorted_filters: - r = None - try: - urlIdx = filter["urlIdx"] - - url = openai_app.state.config.OPENAI_API_BASE_URLS[urlIdx] - key = openai_app.state.config.OPENAI_API_KEYS[urlIdx] - - if key != "": - headers = {"Authorization": f"Bearer {key}"} - r = requests.post( - f"{url}/{filter['id']}/filter/outlet", - headers=headers, - json={ - "user": {"id": user.id, "name": user.name, "role": user.role}, - "body": data, - }, - ) - - r.raise_for_status() - data = r.json() - except Exception as e: - # Handle connection error here - print(f"Connection error: {e}") - - if r is not None: - try: - res = r.json() - if "detail" in res: - return JSONResponse( - status_code=r.status_code, - content=res, - ) - except: - pass - - else: - pass - - return data +# TODO: Refactor pipelines API endpoints below into a separate file @app.get("/api/pipelines/list") @@ -1388,6 +1704,13 @@ async def update_pipeline_valves( ) +################################## +# +# Config Endpoints +# +################################## + + @app.get("/api/config") async def get_app_config(): # Checking and Handling the Absence of 'ui' in CONFIG_DATA @@ -1457,6 +1780,9 @@ async def update_model_filter_config( } +# TODO: webhook endpoint should be under config endpoints + + @app.get("/api/webhook") async def get_webhook_url(user=Depends(get_admin_user)): return { diff --git a/backend/utils/misc.py b/backend/utils/misc.py index c3c65d3f5e..b4e499df87 100644 --- a/backend/utils/misc.py +++ b/backend/utils/misc.py @@ -3,7 +3,9 @@ import hashlib import json import re from datetime import timedelta -from typing import Optional, List +from typing import Optional, List, Tuple +import uuid +import time def get_last_user_message(messages: List[dict]) -> str: @@ -28,6 +30,21 @@ def get_last_assistant_message(messages: List[dict]) -> str: return None +def get_system_message(messages: List[dict]) -> dict: + for message in messages: + if message["role"] == "system": + return message + return None + + +def remove_system_message(messages: List[dict]) -> List[dict]: + return [message for message in messages if message["role"] != "system"] + + +def pop_system_message(messages: List[dict]) -> Tuple[dict, List[dict]]: + return get_system_message(messages), remove_system_message(messages) + + def add_or_update_system_message(content: str, messages: List[dict]): """ Adds a new system message at the beginning of the messages list @@ -47,6 +64,23 @@ def add_or_update_system_message(content: str, messages: List[dict]): return messages +def stream_message_template(model: str, message: str): + return { + "id": f"{model}-{str(uuid.uuid4())}", + "object": "chat.completion.chunk", + "created": int(time.time()), + "model": model, + "choices": [ + { + "index": 0, + "delta": {"content": message}, + "logprobs": None, + "finish_reason": None, + } + ], + } + + def get_gravatar_url(email): # Trim leading and trailing whitespace from # an email address and force all characters diff --git a/backend/utils/task.py b/backend/utils/task.py index 615febcdcd..053a526a80 100644 --- a/backend/utils/task.py +++ b/backend/utils/task.py @@ -6,24 +6,34 @@ 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) + else: + # Replace {{USER_NAME}} in the template with "Unknown" + template = template.replace("{{USER_NAME}}", "Unknown") - 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) + else: + # Replace {{USER_LOCATION}} in the template with "Unknown" + template = template.replace("{{USER_LOCATION}}", "Unknown") return template @@ -61,7 +71,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 +114,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 {} ), diff --git a/backend/utils/utils.py b/backend/utils/utils.py index cc6bb06b86..8c3c899bd5 100644 --- a/backend/utils/utils.py +++ b/backend/utils/utils.py @@ -1,5 +1,5 @@ from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials -from fastapi import HTTPException, status, Depends +from fastapi import HTTPException, status, Depends, Request from apps.webui.models.users import Users @@ -24,7 +24,7 @@ ALGORITHM = "HS256" # Auth Utils ############## -bearer_security = HTTPBearer() +bearer_security = HTTPBearer(auto_error=False) pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") @@ -75,13 +75,26 @@ def get_http_authorization_cred(auth_header: str): def get_current_user( + request: Request, auth_token: HTTPAuthorizationCredentials = Depends(bearer_security), ): + token = None + + if auth_token is not None: + token = auth_token.credentials + + if token is None and "token" in request.cookies: + token = request.cookies.get("token") + + if token is None: + raise HTTPException(status_code=403, detail="Not authenticated") + # auth by api key - if auth_token.credentials.startswith("sk-"): - return get_current_user_by_api_key(auth_token.credentials) + if token.startswith("sk-"): + return get_current_user_by_api_key(token) + # auth by jwt token - data = decode_token(auth_token.credentials) + data = decode_token(token) if data != None and "id" in data: user = Users.get_user_by_id(data["id"]) if user is None: diff --git a/package-lock.json b/package-lock.json index f5b9d6a788..9c4e4ebd52 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", @@ -16,6 +16,7 @@ "async": "^3.2.5", "bits-ui": "^0.19.7", "codemirror": "^6.0.1", + "crc-32": "^1.2.2", "dayjs": "^1.11.10", "eventsource-parser": "^1.1.2", "file-saver": "^2.0.5", @@ -28,11 +29,12 @@ "katex": "^0.16.9", "marked": "^9.1.0", "mermaid": "^10.9.1", - "pyodide": "^0.26.0-alpha.4", - "socket.io-client": "^4.7.5", + "pyodide": "^0.26.1", + "socket.io-client": "^4.2.0", "sortablejs": "^1.15.2", "svelte-sonner": "^0.3.19", "tippy.js": "^6.3.7", + "turndown": "^7.2.0", "uuid": "^9.0.1" }, "devDependencies": { @@ -999,6 +1001,11 @@ "svelte": ">=3 <5" } }, + "node_modules/@mixmark-io/domino": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@mixmark-io/domino/-/domino-2.2.0.tgz", + "integrity": "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==" + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2266,11 +2273,6 @@ "dev": true, "optional": true }, - "node_modules/base-64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", - "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==" - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -3063,6 +3065,17 @@ "layout-base": "^1.0.0" } }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/crelt": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", @@ -3984,37 +3997,17 @@ } }, "node_modules/engine.io-client": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz", - "integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.4.tgz", + "integrity": "sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", - "ws": "~8.11.0", + "ws": "~8.17.1", "xmlhttprequest-ssl": "~2.0.0" } }, - "node_modules/engine.io-client/node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/engine.io-parser": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz", @@ -7551,11 +7544,10 @@ } }, "node_modules/pyodide": { - "version": "0.26.0-alpha.4", - "resolved": "https://registry.npmjs.org/pyodide/-/pyodide-0.26.0-alpha.4.tgz", - "integrity": "sha512-Ixuczq99DwhQlE+Bt0RaS6Ln9MHSZOkbU6iN8azwaeorjHtr7ukaxh+FeTxViFrp2y+ITyKgmcobY+JnBPcULw==", + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/pyodide/-/pyodide-0.26.1.tgz", + "integrity": "sha512-P+Gm88nwZqY7uBgjbQH8CqqU6Ei/rDn7pS1t02sNZsbyLJMyE2OVXjgNuqVT3KqYWnyGREUN0DbBUCJqk8R0ew==", "dependencies": { - "base-64": "^1.0.0", "ws": "^8.5.0" }, "engines": { @@ -9065,6 +9057,14 @@ "node": "*" } }, + "node_modules/turndown": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/turndown/-/turndown-7.2.0.tgz", + "integrity": "sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A==", + "dependencies": { + "@mixmark-io/domino": "^2.2.0" + } + }, "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -10382,9 +10382,9 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", - "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "engines": { "node": ">=10.0.0" }, diff --git a/package.json b/package.json index bf353ef7f4..f46b88175c 100644 --- a/package.json +++ b/package.json @@ -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", @@ -56,6 +56,7 @@ "async": "^3.2.5", "bits-ui": "^0.19.7", "codemirror": "^6.0.1", + "crc-32": "^1.2.2", "dayjs": "^1.11.10", "eventsource-parser": "^1.1.2", "file-saver": "^2.0.5", @@ -68,11 +69,12 @@ "katex": "^0.16.9", "marked": "^9.1.0", "mermaid": "^10.9.1", - "pyodide": "^0.26.0-alpha.4", - "socket.io-client": "^4.7.5", + "pyodide": "^0.26.1", + "socket.io-client": "^4.2.0", "sortablejs": "^1.15.2", "svelte-sonner": "^0.3.19", "tippy.js": "^6.3.7", + "turndown": "^7.2.0", "uuid": "^9.0.1" } } diff --git a/scripts/prepare-pyodide.js b/scripts/prepare-pyodide.js index c14a5bf1bc..5aaac5927e 100644 --- a/scripts/prepare-pyodide.js +++ b/scripts/prepare-pyodide.js @@ -1,4 +1,6 @@ const packages = [ + 'micropip', + 'packaging', 'requests', 'beautifulsoup4', 'numpy', @@ -11,20 +13,64 @@ const packages = [ ]; import { loadPyodide } from 'pyodide'; -import { writeFile, copyFile, readdir } from 'fs/promises'; +import { writeFile, readFile, copyFile, readdir, rmdir } from 'fs/promises'; async function downloadPackages() { console.log('Setting up pyodide + micropip'); - const pyodide = await loadPyodide({ - packageCacheDir: 'static/pyodide' - }); - await pyodide.loadPackage('micropip'); - const micropip = pyodide.pyimport('micropip'); - console.log('Downloading Pyodide packages:', packages); - await micropip.install(packages); - console.log('Pyodide packages downloaded, freezing into lock file'); - const lockFile = await micropip.freeze(); - await writeFile('static/pyodide/pyodide-lock.json', lockFile); + + let pyodide; + try { + pyodide = await loadPyodide({ + packageCacheDir: 'static/pyodide' + }); + } catch (err) { + console.error('Failed to load Pyodide:', err); + return; + } + + const packageJson = JSON.parse(await readFile('package.json')); + const pyodideVersion = packageJson.dependencies.pyodide.replace('^', ''); + + try { + const pyodidePackageJson = JSON.parse(await readFile('static/pyodide/package.json')); + const pyodidePackageVersion = pyodidePackageJson.version.replace('^', ''); + + if (pyodideVersion !== pyodidePackageVersion) { + console.log('Pyodide version mismatch, removing static/pyodide directory'); + await rmdir('static/pyodide', { recursive: true }); + } + } catch (e) { + console.log('Pyodide package not found, proceeding with download.'); + } + + try { + console.log('Loading micropip package'); + await pyodide.loadPackage('micropip'); + + const micropip = pyodide.pyimport('micropip'); + console.log('Downloading Pyodide packages:', packages); + + try { + for (const pkg of packages) { + console.log(`Installing package: ${pkg}`); + await micropip.install(pkg); + } + } catch (err) { + console.error('Package installation failed:', err); + return; + } + + console.log('Pyodide packages downloaded, freezing into lock file'); + + try { + const lockFile = await micropip.freeze(); + await writeFile('static/pyodide/pyodide-lock.json', lockFile); + } catch (err) { + console.error('Failed to write lock file:', err); + } + } catch (err) { + console.error('Failed to load or install micropip:', err); + } } async function copyPyodide() { diff --git a/src/app.html b/src/app.html index a79343df53..da6af2cc4f 100644 --- a/src/app.html +++ b/src/app.html @@ -13,6 +13,12 @@ href="/opensearch.xml" /> + + @@ -69,18 +80,56 @@ class="text-xs text-gray-700 uppercase bg-transparent dark:text-gray-200 border-b-2 dark:border-gray-800" > - {$i18n.t('Name')} - {$i18n.t('Created at')} + setSortKey('title')} + > + {$i18n.t('Title')} + {#if sortKey === 'title'} + {sortOrder === 'asc' ? '▲' : '▼'} + {:else} + + {/if} + + setSortKey('created_at')} + > + {$i18n.t('Created at')} + {#if sortKey === 'created_at'} + {sortOrder === 'asc' ? '▲' : '▼'} + {:else} + + {/if} + + setSortKey('updated_at')} + > + {$i18n.t('Updated at')} + {#if sortKey === 'updated_at'} + {sortOrder === 'asc' ? '▲' : '▼'} + {:else} + + {/if} + - {#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} - +
{chat.title} @@ -88,11 +137,16 @@ - +
{dayjs(chat.created_at * 1000).format($i18n.t('MMMM DD, YYYY HH:mm'))}
+ +
+ {dayjs(chat.updated_at * 1000).format($i18n.t('MMMM DD, YYYY HH:mm'))} +
+
diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index 73b480796e..d83eb3cb2f 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -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'; @@ -272,11 +273,14 @@ id: m.id, role: m.role, content: m.content, + info: m.info ? m.info : undefined, timestamp: m.timestamp })), chat_id: $chatId }).catch((error) => { - console.error(error); + toast.error(error); + messages.at(-1).error = { content: error }; + return null; }); @@ -321,9 +325,16 @@ } else if (messages.length != 0 && messages.at(-1).done != true) { // Response not done console.log('wait'); + } else if (messages.length != 0 && messages.at(-1).error) { + // Error in response + toast.error( + $i18n.t( + `Oops! There was an error in the previous response. Please try again or contact admin.` + ) + ); } else if ( files.length > 0 && - files.filter((file) => file.upload_status === false).length > 0 + files.filter((file) => file.type !== 'image' && file.status !== 'processed').length > 0 ) { // Upload not done toast.error( @@ -533,7 +544,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')}` : '' @@ -578,23 +595,18 @@ } }); - let docs = []; - + let files = []; if (model?.info?.meta?.knowledge ?? false) { - docs = model.info.meta.knowledge; + files = model.info.meta.knowledge; } - - docs = [ - ...docs, - ...messages - .filter((message) => message?.files ?? null) - .map((message) => - message.files.filter((item) => - ['doc', 'collection', 'web_search_results'].includes(item.type) - ) - ) - .flat(1) + const lastUserMessage = messages.filter((message) => message.role === 'user').at(-1); + files = [ + ...files, + ...(lastUserMessage?.files?.filter((item) => + ['doc', 'file', 'collection', 'web_search_results'].includes(item.type) + ) ?? []) ].filter( + // Remove duplicates (item, index, array) => array.findIndex((i) => JSON.stringify(i) === JSON.stringify(item)) === index ); @@ -626,8 +638,8 @@ format: $settings.requestFormat ?? undefined, keep_alive: $settings.keepAlive ?? undefined, tool_ids: selectedToolIds.length > 0 ? selectedToolIds : undefined, - docs: docs.length > 0 ? docs : undefined, - citations: docs.length > 0, + files: files.length > 0 ? files : undefined, + citations: files.length > 0 ? true : undefined, chat_id: $chatId }); @@ -823,23 +835,18 @@ let _response = null; const responseMessage = history.messages[responseMessageId]; - let docs = []; - + let files = []; if (model?.info?.meta?.knowledge ?? false) { - docs = model.info.meta.knowledge; + files = model.info.meta.knowledge; } - - docs = [ - ...docs, - ...messages - .filter((message) => message?.files ?? null) - .map((message) => - message.files.filter((item) => - ['doc', 'collection', 'web_search_results'].includes(item.type) - ) - ) - .flat(1) + const lastUserMessage = messages.filter((message) => message.role === 'user').at(-1); + files = [ + ...files, + ...(lastUserMessage?.files?.filter((item) => + ['doc', 'file', 'collection', 'web_search_results'].includes(item.type) + ) ?? []) ].filter( + // Remove duplicates (item, index, array) => array.findIndex((i) => JSON.stringify(i) === JSON.stringify(item)) === index ); @@ -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')}` : '' @@ -923,11 +936,12 @@ frequency_penalty: $settings?.params?.frequency_penalty ?? undefined, max_tokens: $settings?.params?.max_tokens ?? undefined, tool_ids: selectedToolIds.length > 0 ? selectedToolIds : undefined, - docs: docs.length > 0 ? docs : undefined, - citations: docs.length > 0, + files: files.length > 0 ? files : undefined, + citations: files.length > 0 ? true : undefined, + chat_id: $chatId }, - `${OPENAI_API_BASE_URL}` + `${WEBUI_BASE_URL}/api` ); // Wait until history/message have been updated @@ -1309,6 +1323,19 @@ ? 'md:max-w-[calc(100%-260px)]' : ''} w-full max-w-full flex flex-col" > + {#if $settings?.backgroundImageUrl ?? null} +
+ +
+ {/if} + 0 && messages.length === 0 && !$chatId && selectedModels.length <= 1}
{#each $banners.filter( (b) => (b.dismissible ? !JSON.parse(localStorage.getItem('dismissedBannerIds') ?? '[]').includes(b.id) : true) ) as banner} @@ -1345,9 +1374,9 @@
{/if} -
+
-
+
@@ -517,12 +532,12 @@ {/if}
- {:else if file.type === 'doc'} + {:else if ['doc', 'file'].includes(file.type)}
- {#if file.upload_status} + {#if file.status === 'processed'} - import { config, settings, showCallOverlay } from '$lib/stores'; + import { config, models, settings, showCallOverlay } from '$lib/stores'; import { onMount, tick, getContext } from 'svelte'; import { @@ -28,9 +28,12 @@ export let chatId; export let modelId; + let model = null; + let loading = false; let confirmed = false; let interrupted = false; + let assistantSpeaking = false; let emoji = null; @@ -268,6 +271,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 +391,7 @@ }; const stopAllAudio = async () => { + assistantSpeaking = false; interrupted = true; if (chatStreaming) { @@ -485,6 +498,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 @@ -495,6 +509,8 @@ }; onMount(async () => { + model = $models.find((m) => m.id === modelId); + startRecording(); const chatStartHandler = async (e) => { @@ -511,6 +527,7 @@ } audioAbortController = new AbortController(); + assistantSpeaking = true; // Start monitoring and playing audio for the message ID monitorAndPlayAudio(id, audioAbortController.signal); } @@ -545,9 +562,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 +594,15 @@ >
{#if camera} -
+
+ {/if}
{#if !camera} - {#if emoji} -
- {emoji} -
- {:else if loading} -
+ {emoji} +
+ {:else if loading || assistantSpeaking} + - {:else} -
- {/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); + } + } + + {:else} +
+ {/if} + {:else}
-
{prompt.title[1]}
{:else}
{prompt.content}
diff --git a/src/lib/components/chat/Messages.svelte b/src/lib/components/chat/Messages.svelte index f633b57744..699a8fbc1f 100644 --- a/src/lib/components/chat/Messages.svelte +++ b/src/lib/components/chat/Messages.svelte @@ -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'} 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} +
{/if} {/key}
diff --git a/src/lib/components/chat/Messages/CodeBlock.svelte b/src/lib/components/chat/Messages/CodeBlock.svelte index 4f576ef241..9714e86c74 100644 --- a/src/lib/components/chat/Messages/CodeBlock.svelte +++ b/src/lib/components/chat/Messages/CodeBlock.svelte @@ -203,8 +203,18 @@ __builtins__.input = input`); }; }; + let debounceTimeout; $: if (code) { - highlightedCode = hljs.highlightAuto(code, hljs.getLanguage(lang)?.aliases).value || code; + // Function to perform the code highlighting + const highlightCode = () => { + highlightedCode = hljs.highlightAuto(code, hljs.getLanguage(lang)?.aliases).value || code; + }; + + // Clear the previous timeout if it exists + clearTimeout(debounceTimeout); + + // Set a new timeout to debounce the code highlighting + debounceTimeout = setTimeout(highlightCode, 10); } diff --git a/src/lib/components/chat/Messages/Placeholder.svelte b/src/lib/components/chat/Messages/Placeholder.svelte index cdcb7784e4..25cb957dfc 100644 --- a/src/lib/components/chat/Messages/Placeholder.svelte +++ b/src/lib/components/chat/Messages/Placeholder.svelte @@ -9,6 +9,7 @@ import Suggestions from '../MessageInput/Suggestions.svelte'; import { sanitizeResponseContent } from '$lib/utils'; + import Tooltip from '$lib/components/common/Tooltip.svelte'; const i18n = getContext('i18n'); @@ -41,14 +42,23 @@ selectedModelIdx = modelIdx; }} > - logo + + logo + {/each}
diff --git a/src/lib/components/chat/Messages/ProfileImage.svelte b/src/lib/components/chat/Messages/ProfileImage.svelte index 44f3b5fce3..9d9f67a8d1 100644 --- a/src/lib/components/chat/Messages/ProfileImage.svelte +++ b/src/lib/components/chat/Messages/ProfileImage.svelte @@ -2,10 +2,12 @@ import { settings } from '$lib/stores'; import { WEBUI_BASE_URL } from '$lib/constants'; + export let className = 'size-8'; + export let src = '/user.png'; -
+
profile diff --git a/src/lib/components/chat/Messages/ResponseMessage.svelte b/src/lib/components/chat/Messages/ResponseMessage.svelte index a10f2fa626..b1c91edcc5 100644 --- a/src/lib/components/chat/Messages/ResponseMessage.svelte +++ b/src/lib/components/chat/Messages/ResponseMessage.svelte @@ -15,12 +15,13 @@ const dispatch = createEventDispatcher(); - import { config, models, settings } from '$lib/stores'; + import { config, models, settings, user } from '$lib/stores'; import { synthesizeOpenAISpeech } from '$lib/apis/audio'; import { imageGenerations } from '$lib/apis/images'; import { approximateToHumanReadable, extractSentences, + replaceTokens, revertSanitizedResponseContent, sanitizeResponseContent } from '$lib/utils'; @@ -74,7 +75,9 @@ let selectedCitation = null; - $: tokens = marked.lexer(sanitizeResponseContent(message?.content)); + $: tokens = marked.lexer( + replaceTokens(sanitizeResponseContent(message?.content), model?.name, $user?.name) + ); const renderer = new marked.Renderer(); @@ -460,6 +463,18 @@ e.target.style.height = ''; e.target.style.height = `${e.target.scrollHeight}px`; }} + on:keydown={(e) => { + if (e.key === 'Escape') { + document.getElementById('close-edit-message-button')?.click(); + } + + const isCmdOrCtrlPressed = e.metaKey || e.ctrlKey; + const isEnterPressed = e.key === 'Enter'; + + if (isCmdOrCtrlPressed && isEnterPressed) { + document.getElementById('save-edit-message-button')?.click(); + } + }} />
@@ -940,68 +955,68 @@ > - {/if} - {#if isLastMessage && !readOnly} - - - + + + + + + - - - + + + + + + {/if} {/if} {/if}
diff --git a/src/lib/components/chat/Messages/UserMessage.svelte b/src/lib/components/chat/Messages/UserMessage.svelte index 04591a14f4..7ac18e7140 100644 --- a/src/lib/components/chat/Messages/UserMessage.svelte +++ b/src/lib/components/chat/Messages/UserMessage.svelte @@ -8,6 +8,7 @@ import Tooltip from '$lib/components/common/Tooltip.svelte'; import { user as _user } from '$lib/stores'; + import { getFileContentById } from '$lib/apis/files'; const i18n = getContext('i18n'); @@ -97,6 +98,42 @@
{#if file.type === 'image'} input + {:else if file.type === 'file'} + {:else if file.type === 'doc'}
-
-
-
{$i18n.t('Title Auto-Generation')}
- - -
-
- -
-
-
- {$i18n.t('Response AutoCopy to Clipboard')} -
- - -
-
- -
-
-
{$i18n.t('Widescreen Mode')}
- - -
-
- -
-
-
{$i18n.t('Display Emoji in Call')}
- - -
-
- {#if !$settings.chatBubble}
-
+
{$i18n.t('Display the username instead of You in the Chat')}
@@ -250,7 +248,45 @@
-
+
{$i18n.t('Widescreen Mode')}
+ + +
+
+ +
+
+
{$i18n.t('Chat direction')}
+ + +
+
+ +
+
+
{$i18n.t('Fluidly stream large external response chunks')}
@@ -269,46 +305,118 @@
-
-
-
-
{$i18n.t('Chat direction')}
+
+
+
+ {$i18n.t('Chat Background Image')} +
- -
-
- -
- -
-
-
-
{$i18n.t('Default Model')}
+
-
- +
{$i18n.t('Chat')}
+ +
+
+
{$i18n.t('Title Auto-Generation')}
+ + +
+
+ +
+
+
+ {$i18n.t('Response AutoCopy to Clipboard')} +
+ + +
+
+ +
+
+
{$i18n.t('Allow User Location')}
+ + +
+
+ +
{$i18n.t('Voice')}
+ +
+
+
{$i18n.t('Display Emoji in Call')}
+ + +
diff --git a/src/lib/components/chat/SettingsModal.svelte b/src/lib/components/chat/SettingsModal.svelte index d6b3a21e26..7160910073 100644 --- a/src/lib/components/chat/SettingsModal.svelte +++ b/src/lib/components/chat/SettingsModal.svelte @@ -88,35 +88,6 @@
{$i18n.t('General')}
- {#if $user.role === 'admin'} - - {/if} -
+ {#if $user.role === 'admin'} + + {/if} + - +
{:else if shiftKey && mouseOver}
- + - + + + + + + + + + + + +
+ + {/each} +
+ + + +
+
+ { + console.log(importFiles); + showConfirm = true; + }} + /> + + + + +
+
+ + { + const reader = new FileReader(); + reader.onload = async (event) => { + const _functions = JSON.parse(event.target.result); + console.log(_functions); + + for (const func of _functions) { + const res = await createNewFunction(localStorage.token, func).catch((error) => { + toast.error(error); + return null; + }); + } + + toast.success('Functions imported successfully'); + functions.set(await getFunctions(localStorage.token)); + models.set(await getModels(localStorage.token)); + }; + + reader.readAsText(importFiles[0]); + }} +> +
+
+
Please carefully review the following warnings:
+ +
    +
  • Functions allow arbitrary code execution.
  • +
  • Do not install functions from sources you do not fully trust.
  • +
+
+ +
+ I acknowledge that I have read and I understand the implications of my action. I am aware of + the risks associated with executing arbitrary code and I have verified the trustworthiness of + the source. +
+
+
diff --git a/src/lib/components/workspace/Functions/FunctionEditor.svelte b/src/lib/components/workspace/Functions/FunctionEditor.svelte new file mode 100644 index 0000000000..7540781e1e --- /dev/null +++ b/src/lib/components/workspace/Functions/FunctionEditor.svelte @@ -0,0 +1,381 @@ + + +
+
+
{ + if (edit) { + submitHandler(); + } else { + showConfirm = true; + } + }} + > +
+ +
+ + +
+
+
+ + { + submitHandler(); + }} +> +
+
+
Please carefully review the following warnings:
+ +
    +
  • Functions allow arbitrary code execution.
  • +
  • Do not install functions from sources you do not fully trust.
  • +
+
+ +
+ I acknowledge that I have read and I understand the implications of my action. I am aware of + the risks associated with executing arbitrary code and I have verified the trustworthiness of + the source. +
+
+
diff --git a/src/lib/components/workspace/Models/FiltersSelector.svelte b/src/lib/components/workspace/Models/FiltersSelector.svelte new file mode 100644 index 0000000000..92f64c2cf0 --- /dev/null +++ b/src/lib/components/workspace/Models/FiltersSelector.svelte @@ -0,0 +1,60 @@ + + +
+
+
{$i18n.t('Filters')}
+
+ +
+ {$i18n.t('To select filters here, add them to the "Functions" workspace first.')} +
+ + +
+ {#if filters.length > 0} +
+ {#each Object.keys(_filters) as filter, filterIdx} +
+
+ { + _filters[filter].selected = e.detail === 'checked'; + selectedFilterIds = Object.keys(_filters).filter((t) => _filters[t].selected); + }} + /> +
+ +
+ + {_filters[filter].name} + +
+
+ {/each} +
+ {/if} +
+
diff --git a/src/lib/components/workspace/Models/ModelMenu.svelte b/src/lib/components/workspace/Models/ModelMenu.svelte index 7d4650e66d..f3a21d510f 100644 --- a/src/lib/components/workspace/Models/ModelMenu.svelte +++ b/src/lib/components/workspace/Models/ModelMenu.svelte @@ -124,7 +124,11 @@ {/if}
- {$i18n.t(model?.info?.meta?.hidden ?? false ? 'Show Model' : 'Hide Model')} + {#if model?.info?.meta?.hidden ?? false} + {$i18n.t('Show Model')} + {:else} + {$i18n.t('Hide Model')} + {/if}
diff --git a/src/lib/components/workspace/Models/ToolsSelector.svelte b/src/lib/components/workspace/Models/ToolsSelector.svelte index 584e737c5d..5f1b3b4821 100644 --- a/src/lib/components/workspace/Models/ToolsSelector.svelte +++ b/src/lib/components/workspace/Models/ToolsSelector.svelte @@ -33,9 +33,9 @@
{#if tools.length > 0} -
+
{#each Object.keys(_tools) as tool, toolIdx} -
+
-
+
+
+ TOOL +
+
{tool.name}
-
{tool.id}
-
- {tool.meta.description} + +
+
{tool.id}
+ +
+ {tool.meta.description} +
diff --git a/src/lib/components/workspace/Tools/CodeEditor.svelte b/src/lib/components/workspace/Tools/CodeEditor.svelte deleted file mode 100644 index b8e5831b55..0000000000 --- a/src/lib/components/workspace/Tools/CodeEditor.svelte +++ /dev/null @@ -1,127 +0,0 @@ - - - { - dispatch('save'); - }} -/> diff --git a/src/lib/components/workspace/Tools/ToolkitEditor.svelte b/src/lib/components/workspace/Tools/ToolkitEditor.svelte index 81a3b10d76..385a9ea682 100644 --- a/src/lib/components/workspace/Tools/ToolkitEditor.svelte +++ b/src/lib/components/workspace/Tools/ToolkitEditor.svelte @@ -3,7 +3,7 @@ const i18n = getContext('i18n'); - import CodeEditor from './CodeEditor.svelte'; + import CodeEditor from '$lib/components/common/CodeEditor.svelte'; import { goto } from '$app/navigation'; import ConfirmDialog from '$lib/components/common/ConfirmDialog.svelte'; @@ -28,6 +28,107 @@ } let codeEditor; + let boilerplate = `import os +import requests +from datetime import datetime + + +class Tools: + def __init__(self): + pass + + # Add your custom tools using pure Python code here, make sure to add type hints + # Use Sphinx-style docstrings to document your tools, they will be used for generating tools specifications + # Please refer to function_calling_filter_pipeline.py file from pipelines project for an example + + def get_user_name_and_email_and_id(self, __user__: dict = {}) -> str: + """ + Get the user name, Email and ID from the user object. + """ + + # Do not include :param for __user__ in the docstring as it should not be shown in the tool's specification + # The session user object will be passed as a parameter when the function is called + + print(__user__) + result = "" + + if "name" in __user__: + result += f"User: {__user__['name']}" + if "id" in __user__: + result += f" (ID: {__user__['id']})" + if "email" in __user__: + result += f" (Email: {__user__['email']})" + + if result == "": + result = "User: Unknown" + + return result + + def get_current_time(self) -> str: + """ + Get the current time in a more human-readable format. + :return: The current time. + """ + + now = datetime.now() + current_time = now.strftime("%I:%M:%S %p") # Using 12-hour format with AM/PM + current_date = now.strftime( + "%A, %B %d, %Y" + ) # Full weekday, month name, day, and year + + return f"Current Date and Time = {current_date}, {current_time}" + + def calculator(self, equation: str) -> str: + """ + Calculate the result of an equation. + :param equation: The equation to calculate. + """ + + # Avoid using eval in production code + # https://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html + try: + result = eval(equation) + return f"{equation} = {result}" + except Exception as e: + print(e) + return "Invalid equation" + + def get_current_weather(self, city: str) -> str: + """ + Get the current weather for a given city. + :param city: The name of the city to get the weather for. + :return: The current weather information or an error message. + """ + api_key = os.getenv("OPENWEATHER_API_KEY") + if not api_key: + return ( + "API key is not set in the environment variable 'OPENWEATHER_API_KEY'." + ) + + base_url = "http://api.openweathermap.org/data/2.5/weather" + params = { + "q": city, + "appid": api_key, + "units": "metric", # Optional: Use 'imperial' for Fahrenheit + } + + try: + response = requests.get(base_url, params=params) + response.raise_for_status() # Raise HTTPError for bad responses (4xx and 5xx) + data = response.json() + + if data.get("cod") != 200: + return f"Error fetching weather data: {data.get('message')}" + + weather_description = data["weather"][0]["description"] + temperature = data["main"]["temp"] + humidity = data["main"]["humidity"] + wind_speed = data["wind"]["speed"] + + return f"Weather in {city}: {temperature}°C" + except requests.RequestException as e: + return f"Error fetching weather data: {str(e)}" +`; const saveHandler = async () => { loading = true; @@ -41,7 +142,7 @@ const submitHandler = async () => { if (codeEditor) { - const res = await codeEditor.formatHandler(); + const res = await codeEditor.formatPythonCodeHandler(); if (res) { console.log('Code formatted successfully'); @@ -123,6 +224,7 @@ { if (formElement) { formElement.requestSubmit(); diff --git a/src/lib/i18n/locales/ar-BH/translation.json b/src/lib/i18n/locales/ar-BH/translation.json index 7cb5ec6cd8..cdc03aae6e 100644 --- a/src/lib/i18n/locales/ar-BH/translation.json +++ b/src/lib/i18n/locales/ar-BH/translation.json @@ -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": "مساعد", @@ -81,6 +82,7 @@ "Capabilities": "قدرات", "Change Password": "تغير الباسورد", "Chat": "المحادثة", + "Chat Background Image": "", "Chat Bubble UI": "UI الدردشة", "Chat direction": "اتجاه المحادثة", "Chat History": "تاريخ المحادثة", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "أضغط هنا للمساعدة", "Click here to": "أضغط هنا الانتقال", + "Click here to download user import template file.": "", "Click here to select": "أضغط هنا للاختيار", "Click here to select a csv file.": "أضغط هنا للاختيار ملف csv", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "ComfyUI الرابط مطلوب", "Command": "الأوامر", "Concurrent Requests": "الطلبات المتزامنة", + "Confirm": "", "Confirm Password": "تأكيد كلمة المرور", + "Confirm your action": "", "Connections": "اتصالات", "Contact Admin for WebUI Access": "", "Content": "الاتصال", @@ -130,6 +135,8 @@ "Create new secret key": "عمل سر جديد", "Created at": "أنشئت في", "Created At": "أنشئت من", + "Created by": "", + "CSV Import": "", "Current Model": "الموديل المختار", "Current Password": "كلمة السر الحالية", "Custom": "مخصص", @@ -151,6 +158,7 @@ "Delete All Chats": "حذف جميع الدردشات", "Delete chat": "حذف المحادثه", "Delete Chat": "حذف المحادثه.", + "Delete chat?": "", "delete this link": "أحذف هذا الرابط", "Delete User": "حذف المستخدم", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} حذف", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "تصدير جميع الدردشات", "Export Documents Mapping": "تصدير وثائق الخرائط", + "Export Functions": "", "Export Models": "نماذج التصدير", "Export Prompts": "مطالبات التصدير", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "فبراير", "Feel free to add specific details": "لا تتردد في إضافة تفاصيل محددة", + "File": "", "File Mode": "وضع الملف", "File not found.": "لم يتم العثور على الملف.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "تم اكتشاف انتحال بصمة الإصبع: غير قادر على استخدام الأحرف الأولى كصورة رمزية. الافتراضي لصورة الملف الشخصي الافتراضية.", "Fluidly stream large external response chunks": "دفق قطع الاستجابة الخارجية الكبيرة بسلاسة", "Focus chat input": "التركيز على إدخال الدردشة", "Followed instructions perfectly": "اتبعت التعليمات على أكمل وجه", + "Form": "", "Format your variables using square brackets like this:": "قم بتنسيق المتغيرات الخاصة بك باستخدام الأقواس المربعة مثل هذا:", "Frequency Penalty": "عقوبة التردد", + "Functions": "", "General": "عام", "General Settings": "الاعدادات العامة", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": " {{name}} مرحبا", "Help": "مساعدة", "Hide": "أخفاء", + "Hide Model": "", "How can I help you today?": "كيف استطيع مساعدتك اليوم؟", "Hybrid Search": "البحث الهجين", "Image Generation (Experimental)": "توليد الصور (تجريبي)", @@ -262,6 +276,7 @@ "Images": "الصور", "Import Chats": "استيراد الدردشات", "Import Documents Mapping": "استيراد خرائط المستندات", + "Import Functions": "", "Import Models": "استيراد النماذج", "Import Prompts": "مطالبات الاستيراد", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "يُسمح فقط بالأحرف الأبجدية الرقمية والواصلات في سلسلة الأمر.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "خطاء! تمسك بقوة! ملفاتك لا تزال في فرن المعالجة. نحن نطبخهم إلى حد الكمال. يرجى التحلي بالصبر وسنخبرك عندما يصبحون جاهزين.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "خطاء! يبدو أن عنوان URL غير صالح. يرجى التحقق مرة أخرى والمحاولة مرة أخرى.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "خطاء! أنت تستخدم طريقة غير مدعومة (الواجهة الأمامية فقط). يرجى تقديم واجهة WebUI من الواجهة الخلفية.", "Open": "فتح", "Open AI": "AI فتح", @@ -406,6 +422,7 @@ "Reranking Model": "إعادة تقييم النموذج", "Reranking model disabled": "تم تعطيل نموذج إعادة الترتيب", "Reranking model set to \"{{reranking_model}}\"": "تم ضبط نموذج إعادة الترتيب على \"{{reranking_model}}\"", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "إعادة تعيين تخزين المتجهات", "Response AutoCopy to Clipboard": "النسخ التلقائي للاستجابة إلى الحافظة", @@ -425,6 +442,7 @@ "Search a model": "البحث عن موديل", "Search Chats": "البحث في الدردشات", "Search Documents": "البحث المستندات", + "Search Functions": "", "Search Models": "نماذج البحث", "Search Prompts": "أبحث حث", "Search Query Generation Prompt": "", @@ -478,6 +496,7 @@ "short-summary": "ملخص قصير", "Show": "عرض", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "إظهار الاختصارات", "Showcased creativity": "أظهر الإبداع", "sidebar": "الشريط الجانبي", @@ -499,6 +518,7 @@ "System": "النظام", "System Prompt": "محادثة النظام", "Tags": "الوسوم", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "أخبرنا المزيد:", "Temperature": "درجة حرارة", @@ -510,9 +530,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "يجب أن تكون النتيجة قيمة تتراوح بين 0.0 (0%) و1.0 (100%).", "Theme": "الثيم", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "وهذا يضمن حفظ محادثاتك القيمة بشكل آمن في قاعدة بياناتك الخلفية. شكرًا لك!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "لا تتم مزامنة هذا الإعداد عبر المتصفحات أو الأجهزة.", + "This will delete": "", "Thorough explanation": "شرح شامل", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "ملاحضة: قم بتحديث عدة فتحات متغيرة على التوالي عن طريق الضغط على مفتاح tab في مدخلات الدردشة بعد كل استبدال.", "Title": "العنوان", @@ -526,6 +548,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "الى كتابة المحادثه", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "اليوم", "Toggle settings": "فتح وأغلاق الاعدادات", @@ -541,10 +564,13 @@ "Type": "نوع", "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}}', ولكن القبول والتعامل كنص عادي ", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "تحديث ونسخ الرابط", "Update password": "تحديث كلمة المرور", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "GGUF رفع موديل نوع", "Upload Files": "تحميل الملفات", "Upload Pipeline": "", @@ -563,6 +589,7 @@ "variable": "المتغير", "variable to have them replaced with clipboard content.": "متغير لاستبدالها بمحتوى الحافظة.", "Version": "إصدار", + "Voice": "", "Warning": "تحذير", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "تحذير: إذا قمت بتحديث أو تغيير نموذج التضمين الخاص بك، فستحتاج إلى إعادة استيراد كافة المستندات.", "Web": "Web", @@ -572,7 +599,6 @@ "Web Search": "بحث الويب", "Web Search Engine": "محرك بحث الويب", "Webhook URL": "Webhook الرابط", - "WebUI Add-ons": "WebUI الأضافات", "WebUI Settings": "WebUI اعدادات", "WebUI will make requests to": "سوف يقوم WebUI بتقديم طلبات ل", "What’s New in": "ما هو الجديد", diff --git a/src/lib/i18n/locales/bg-BG/translation.json b/src/lib/i18n/locales/bg-BG/translation.json index 7105089462..cd848ed070 100644 --- a/src/lib/i18n/locales/bg-BG/translation.json +++ b/src/lib/i18n/locales/bg-BG/translation.json @@ -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": "асистент", @@ -81,6 +82,7 @@ "Capabilities": "Възможности", "Change Password": "Промяна на Парола", "Chat": "Чат", + "Chat Background Image": "", "Chat Bubble UI": "UI за чат бублон", "Chat direction": "Направление на чата", "Chat History": "Чат История", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "Натиснете тук за помощ.", "Click here to": "Натиснете тук за", + "Click here to download user import template file.": "", "Click here to select": "Натиснете тук, за да изберете", "Click here to select a csv file.": "Натиснете тук, за да изберете csv файл.", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "ComfyUI Base URL е задължително.", "Command": "Команда", "Concurrent Requests": "Едновременни искания", + "Confirm": "", "Confirm Password": "Потвърди Парола", + "Confirm your action": "", "Connections": "Връзки", "Contact Admin for WebUI Access": "", "Content": "Съдържание", @@ -130,6 +135,8 @@ "Create new secret key": "Създаване на нов секретен ключ", "Created at": "Създадено на", "Created At": "Създадено на", + "Created by": "", + "CSV Import": "", "Current Model": "Текущ модел", "Current Password": "Текуща Парола", "Custom": "Персонализиран", @@ -151,6 +158,7 @@ "Delete All Chats": "Изтриване на всички чатове", "Delete chat": "Изтриване на чат", "Delete Chat": "Изтриване на Чат", + "Delete chat?": "", "delete this link": "Изтриване на този линк", "Delete User": "Изтриване на потребител", "Deleted {{deleteModelTag}}": "Изтрито {{deleteModelTag}}", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "Експортване на чатове", "Export Documents Mapping": "Експортване на документен мапинг", + "Export Functions": "", "Export Models": "Експортиране на модели", "Export Prompts": "Експортване на промптове", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "Февруари", "Feel free to add specific details": "Feel free to add specific details", + "File": "", "File Mode": "Файл Мод", "File not found.": "Файл не е намерен.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Потвърждаване на отпечатък: Не може да се използва инициализационна буква като аватар. Потребителят се връща към стандартна аватарка.", "Fluidly stream large external response chunks": "Плавно предаване на големи части от външен отговор", "Focus chat input": "Фокусиране на чат вход", "Followed instructions perfectly": "Следвайте инструкциите перфектно", + "Form": "", "Format your variables using square brackets like this:": "Форматирайте вашите променливи, като използвате квадратни скоби, както следва:", "Frequency Penalty": "Наказание за честота", + "Functions": "", "General": "Основни", "General Settings": "Основни Настройки", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Здравей, {{name}}", "Help": "Помощ", "Hide": "Скрий", + "Hide Model": "", "How can I help you today?": "Как мога да ви помогна днес?", "Hybrid Search": "Hybrid Search", "Image Generation (Experimental)": "Генерация на изображения (Експериментално)", @@ -262,6 +276,7 @@ "Images": "Изображения", "Import Chats": "Импортване на чатове", "Import Documents Mapping": "Импортване на документен мапинг", + "Import Functions": "", "Import Models": "Импортиране на модели", "Import Prompts": "Импортване на промптове", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Само алфанумерични знаци и тире са разрешени в командния низ.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Упс! Задръжте! Файловете ви все още са в пещта за обработка. Готвим ги до съвършенство. Моля, бъдете търпеливи и ще ви уведомим, когато са готови.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Упс! Изглежда URL адресът е невалиден. Моля, проверете отново и опитайте пак.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Упс! Използвате неподдържан метод (само фронтенд). Моля, сервирайте WebUI от бекенда.", "Open": "Отвори", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "Reranking Model", "Reranking model disabled": "Reranking model disabled", "Reranking model set to \"{{reranking_model}}\"": "Reranking model set to \"{{reranking_model}}\"", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "Ресет Vector Storage", "Response AutoCopy to Clipboard": "Аувтоматично копиране на отговор в клипборда", @@ -425,6 +442,7 @@ "Search a model": "Търси модел", "Search Chats": "Търсене на чатове", "Search Documents": "Търси Документи", + "Search Functions": "", "Search Models": "Търсене на модели", "Search Prompts": "Търси Промптове", "Search Query Generation Prompt": "", @@ -474,6 +492,7 @@ "short-summary": "short-summary", "Show": "Покажи", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Покажи", "Showcased creativity": "Показана креативност", "sidebar": "sidebar", @@ -495,6 +514,7 @@ "System": "Система", "System Prompt": "Системен Промпт", "Tags": "Тагове", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "Повече информация:", "Temperature": "Температура", @@ -506,9 +526,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "The score should be a value between 0.0 (0%) and 1.0 (100%).", "Theme": "Тема", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Това гарантира, че ценните ви разговори се запазват сигурно във вашата бекенд база данни. Благодарим ви!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "Тази настройка не се синхронизира между браузъри или устройства.", + "This will delete": "", "Thorough explanation": "Това е подробно описание.", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Съвет: Актуализирайте няколко слота за променливи последователно, като натискате клавиша Tab в чат входа след всяка подмяна.", "Title": "Заглавие", @@ -522,6 +544,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "към чат входа.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "днес", "Toggle settings": "Toggle settings", @@ -537,10 +560,13 @@ "Type": "Вид", "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}}', но се приема и обработва като текст", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Обнови и копирай връзка", "Update password": "Обновяване на парола", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "Качване на GGUF модел", "Upload Files": "Качване на файлове", "Upload Pipeline": "", @@ -559,6 +585,7 @@ "variable": "променлива", "variable to have them replaced with clipboard content.": "променливи да се заменят съдържанието от клипборд.", "Version": "Версия", + "Voice": "", "Warning": "Предупреждение", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Предупреждение: Ако актуализирате или промените вашия модел за вграждане, трябва да повторите импортирането на всички документи.", "Web": "Уеб", @@ -568,7 +595,6 @@ "Web Search": "Търсене в уеб", "Web Search Engine": "Уеб търсачка", "Webhook URL": "Уебхук URL", - "WebUI Add-ons": "WebUI Добавки", "WebUI Settings": "WebUI Настройки", "WebUI will make requests to": "WebUI ще направи заявки към", "What’s New in": "Какво е новото в", diff --git a/src/lib/i18n/locales/bn-BD/translation.json b/src/lib/i18n/locales/bn-BD/translation.json index 32b482c9f5..205f33796f 100644 --- a/src/lib/i18n/locales/bn-BD/translation.json +++ b/src/lib/i18n/locales/bn-BD/translation.json @@ -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": "একটা এসিস্ট্যান্ট", @@ -81,6 +82,7 @@ "Capabilities": "সক্ষমতা", "Change Password": "পাসওয়ার্ড পরিবর্তন করুন", "Chat": "চ্যাট", + "Chat Background Image": "", "Chat Bubble UI": "চ্যাট বাবল UI", "Chat direction": "চ্যাট দিকনির্দেশ", "Chat History": "চ্যাট হিস্টোরি", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "সাহায্যের জন্য এখানে ক্লিক করুন", "Click here to": "এখানে ক্লিক করুন", + "Click here to download user import template file.": "", "Click here to select": "নির্বাচন করার জন্য এখানে ক্লিক করুন", "Click here to select a csv file.": "একটি csv ফাইল নির্বাচন করার জন্য এখানে ক্লিক করুন", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "ComfyUI Base URL আবশ্যক।", "Command": "কমান্ড", "Concurrent Requests": "সমকালীন অনুরোধ", + "Confirm": "", "Confirm Password": "পাসওয়ার্ড নিশ্চিত করুন", + "Confirm your action": "", "Connections": "কানেকশনগুলো", "Contact Admin for WebUI Access": "", "Content": "বিষয়বস্তু", @@ -130,6 +135,8 @@ "Create new secret key": "একটি নতুন সিক্রেট কী তৈরি করুন", "Created at": "নির্মানকাল", "Created At": "নির্মানকাল", + "Created by": "", + "CSV Import": "", "Current Model": "বর্তমান মডেল", "Current Password": "বর্তমান পাসওয়ার্ড", "Custom": "কাস্টম", @@ -151,6 +158,7 @@ "Delete All Chats": "সব চ্যাট মুছে ফেলুন", "Delete chat": "চ্যাট মুছে ফেলুন", "Delete Chat": "চ্যাট মুছে ফেলুন", + "Delete chat?": "", "delete this link": "এই লিংক মুছে ফেলুন", "Delete User": "ইউজার মুছে ফেলুন", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} মুছে ফেলা হয়েছে", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "চ্যাটগুলো এক্সপোর্ট করুন", "Export Documents Mapping": "ডকুমেন্টসমূহ ম্যাপিং এক্সপোর্ট করুন", + "Export Functions": "", "Export Models": "রপ্তানি মডেল", "Export Prompts": "প্রম্পটগুলো একপোর্ট করুন", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "ফেব্রুয়ারি", "Feel free to add specific details": "নির্দিষ্ট বিবরণ যোগ করতে বিনা দ্বিধায়", + "File": "", "File Mode": "ফাইল মোড", "File not found.": "ফাইল পাওয়া যায়নি", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "ফিঙ্গারপ্রিন্ট স্পুফিং ধরা পড়েছে: অ্যাভাটার হিসেবে নামের আদ্যক্ষর ব্যবহার করা যাচ্ছে না। ডিফল্ট প্রোফাইল পিকচারে ফিরিয়ে নেয়া হচ্ছে।", "Fluidly stream large external response chunks": "বড় এক্সটার্নাল রেসপন্স চাঙ্কগুলো মসৃণভাবে প্রবাহিত করুন", "Focus chat input": "চ্যাট ইনপুট ফোকাস করুন", "Followed instructions perfectly": "নির্দেশাবলী নিখুঁতভাবে অনুসরণ করা হয়েছে", + "Form": "", "Format your variables using square brackets like this:": "আপনার ভেরিয়বলগুলো এভাবে স্কয়ার ব্রাকেটের মাধ্যমে সাজান", "Frequency Penalty": "ফ্রিকোয়েন্সি পেনাল্টি", + "Functions": "", "General": "সাধারণ", "General Settings": "সাধারণ সেটিংসমূহ", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "হ্যালো, {{name}}", "Help": "সহায়তা", "Hide": "লুকান", + "Hide Model": "", "How can I help you today?": "আপনাকে আজ কিভাবে সাহায্য করতে পারি?", "Hybrid Search": "হাইব্রিড অনুসন্ধান", "Image Generation (Experimental)": "ইমেজ জেনারেশন (পরিক্ষামূলক)", @@ -262,6 +276,7 @@ "Images": "ছবিসমূহ", "Import Chats": "চ্যাটগুলি ইমপোর্ট করুন", "Import Documents Mapping": "ডকুমেন্টসমূহ ম্যাপিং ইমপোর্ট করুন", + "Import Functions": "", "Import Models": "মডেল আমদানি করুন", "Import Prompts": "প্রম্পটগুলো ইমপোর্ট করুন", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "কমান্ড স্ট্রিং-এ শুধুমাত্র ইংরেজি অক্ষর, সংখ্যা এবং হাইফেন ব্যবহার করা যাবে।", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "আহা! আরেকটু ধৈর্য্য ধরুন! আপনার ফাইলগুলো এখনো প্রোসেস চলছে, আমরা ওগুলোকে সেরা প্রক্রিয়াজাত করছি। তৈরি হয়ে গেলে আপনাকে জানিয়ে দেয়া হবে।", "Oops! Looks like the URL is invalid. Please double-check and try again.": "ওহ, মনে হচ্ছে ইউআরএলটা ইনভ্যালিড। দয়া করে আর চেক করে চেষ্টা করুন।", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "আপনি একটা আনসাপোর্টেড পদ্ধতি (শুধু ফ্রন্টএন্ড) ব্যবহার করছেন। দয়া করে WebUI ব্যাকএন্ড থেকে চালনা করুন।", "Open": "খোলা", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "রির্যাক্টিং মডেল", "Reranking model disabled": "রির্যাক্টিং মডেল নিষ্ক্রিয় করা", "Reranking model set to \"{{reranking_model}}\"": "রির ্যাঙ্কিং মডেল \"{{reranking_model}}\" -এ সেট করা আছে", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "ভেক্টর স্টোরেজ রিসেট করুন", "Response AutoCopy to Clipboard": "রেসপন্সগুলো স্বয়ংক্রিভাবে ক্লিপবোর্ডে কপি হবে", @@ -425,6 +442,7 @@ "Search a model": "মডেল অনুসন্ধান করুন", "Search Chats": "চ্যাট অনুসন্ধান করুন", "Search Documents": "ডকুমেন্টসমূহ অনুসন্ধান করুন", + "Search Functions": "", "Search Models": "অনুসন্ধান মডেল", "Search Prompts": "প্রম্পটসমূহ অনুসন্ধান করুন", "Search Query Generation Prompt": "", @@ -474,6 +492,7 @@ "short-summary": "সংক্ষিপ্ত বিবরণ", "Show": "দেখান", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "শর্টকাটগুলো দেখান", "Showcased creativity": "সৃজনশীলতা প্রদর্শন", "sidebar": "সাইডবার", @@ -495,6 +514,7 @@ "System": "সিস্টেম", "System Prompt": "সিস্টেম প্রম্পট", "Tags": "ট্যাগসমূহ", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "আরও বলুন:", "Temperature": "তাপমাত্রা", @@ -506,9 +526,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "স্কোর একটি 0.0 (0%) এবং 1.0 (100%) এর মধ্যে একটি মান হওয়া উচিত।", "Theme": "থিম", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "এটা নিশ্চিত করে যে, আপনার গুরুত্বপূর্ণ আলোচনা নিরাপদে আপনার ব্যাকএন্ড ডেটাবেজে সংরক্ষিত আছে। ধন্যবাদ!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "এই সেটিং অন্যন্য ব্রাউজার বা ডিভাইসের সাথে সিঙ্ক্রোনাইজ নয় না।", + "This will delete": "", "Thorough explanation": "পুঙ্খানুপুঙ্খ ব্যাখ্যা", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "পরামর্শ: একাধিক ভেরিয়েবল স্লট একের পর এক রিপ্লেস করার জন্য চ্যাট ইনপুটে কিবোর্ডের Tab বাটন ব্যবহার করুন।", "Title": "শিরোনাম", @@ -522,6 +544,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "চ্যাট ইনপুটে", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "আজ", "Toggle settings": "সেটিংস টোগল", @@ -537,10 +560,13 @@ "Type": "টাইপ", "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}}', তবে প্লেইন টেক্সট হিসেবে গ্রহণ করা হলো", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "আপডেট এবং লিংক কপি করুন", "Update password": "পাসওয়ার্ড আপডেট করুন", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "একটি GGUF মডেল আপলোড করুন", "Upload Files": "ফাইল আপলোড করুন", "Upload Pipeline": "", @@ -559,6 +585,7 @@ "variable": "ভেরিয়েবল", "variable to have them replaced with clipboard content.": "ক্লিপবোর্ডের কন্টেন্ট দিয়ে যেই ভেরিয়েবল রিপ্লেস করা যাবে।", "Version": "ভার্সন", + "Voice": "", "Warning": "সতর্কীকরণ", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "সতর্কীকরণ: আপনি যদি আপনার এম্বেডিং মডেল আপডেট বা পরিবর্তন করেন, তাহলে আপনাকে সমস্ত নথি পুনরায় আমদানি করতে হবে।.", "Web": "ওয়েব", @@ -568,7 +595,6 @@ "Web Search": "ওয়েব অনুসন্ধান", "Web Search Engine": "ওয়েব সার্চ ইঞ্জিন", "Webhook URL": "ওয়েবহুক URL", - "WebUI Add-ons": "WebUI এড-অনসমূহ", "WebUI Settings": "WebUI সেটিংসমূহ", "WebUI will make requests to": "WebUI যেখানে রিকোয়েস্ট পাঠাবে", "What’s New in": "এতে নতুন কী", diff --git a/src/lib/i18n/locales/ca-ES/translation.json b/src/lib/i18n/locales/ca-ES/translation.json index 96b5627d8c..aedb424e68 100644 --- a/src/lib/i18n/locales/ca-ES/translation.json +++ b/src/lib/i18n/locales/ca-ES/translation.json @@ -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", @@ -81,6 +82,7 @@ "Capabilities": "Capacitats", "Change Password": "Canvia la Contrasenya", "Chat": "Xat", + "Chat Background Image": "", "Chat Bubble UI": "Chat Bubble UI", "Chat direction": "Direcció del Xat", "Chat History": "Històric del Xat", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "Fes clic aquí per ajuda.", "Click here to": "Fes clic aquí per", + "Click here to download user import template file.": "", "Click here to select": "Fes clic aquí per seleccionar", "Click here to select a csv file.": "Fes clic aquí per seleccionar un fitxer csv.", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "URL base de ComfyUI és obligatòria.", "Command": "Comanda", "Concurrent Requests": "Sol·licituds simultànies", + "Confirm": "", "Confirm Password": "Confirma la Contrasenya", + "Confirm your action": "", "Connections": "Connexions", "Contact Admin for WebUI Access": "", "Content": "Contingut", @@ -130,6 +135,8 @@ "Create new secret key": "Crea una nova clau secreta", "Created at": "Creat el", "Created At": "Creat el", + "Created by": "", + "CSV Import": "", "Current Model": "Model Actual", "Current Password": "Contrasenya Actual", "Custom": "Personalitzat", @@ -151,6 +158,7 @@ "Delete All Chats": "Suprimir tots els xats", "Delete chat": "Esborra xat", "Delete Chat": "Esborra Xat", + "Delete chat?": "", "delete this link": "Esborra aquest enllaç", "Delete User": "Esborra Usuari", "Deleted {{deleteModelTag}}": "Esborrat {{deleteModelTag}}", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "Exporta Xats", "Export Documents Mapping": "Exporta el Mapatge de Documents", + "Export Functions": "", "Export Models": "Models d'exportació", "Export Prompts": "Exporta Prompts", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "Febrer", "Feel free to add specific details": "Siusplau, afegeix detalls específics", + "File": "", "File Mode": "Mode Arxiu", "File not found.": "Arxiu no trobat.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "S'ha detectat la suplantació d'identitat d'empremtes digitals: no es poden utilitzar les inicials com a avatar. Per defecte a la imatge de perfil predeterminada.", "Fluidly stream large external response chunks": "Transmita con fluidez grandes fragmentos de respuesta externa", "Focus chat input": "Enfoca l'entrada del xat", "Followed instructions perfectly": "Siguiu les instruccions perfeicte", + "Form": "", "Format your variables using square brackets like this:": "Formata les teves variables utilitzant claudàtors així:", "Frequency Penalty": "Pena de freqüència", + "Functions": "", "General": "General", "General Settings": "Configuració General", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Hola, {{name}}", "Help": "Ajuda", "Hide": "Amaga", + "Hide Model": "", "How can I help you today?": "Com et puc ajudar avui?", "Hybrid Search": "Cerca Hibrida", "Image Generation (Experimental)": "Generació d'Imatges (Experimental)", @@ -262,6 +276,7 @@ "Images": "Imatges", "Import Chats": "Importa Xats", "Import Documents Mapping": "Importa el Mapa de Documents", + "Import Functions": "", "Import Models": "Models d'importació", "Import Prompts": "Importa Prompts", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Només es permeten caràcters alfanumèrics i guions en la cadena de comandes.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Ui! Aguanta! Els teus fitxers encara estan en el forn de processament. Els estem cuinant a la perfecció. Si us plau, tingues paciència i t'avisarem quan estiguin llestos.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ui! Sembla que l'URL és invàlida. Si us plau, revisa-ho i prova de nou.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ui! Estàs utilitzant un mètode no suportat (només frontend). Si us plau, serveix la WebUI des del backend.", "Open": "Obre", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "Model de Reranking desactivat", "Reranking model disabled": "Model de Reranking desactivat", "Reranking model set to \"{{reranking_model}}\"": "Model de Reranking establert a \"{{reranking_model}}\"", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "Reinicia l'Emmagatzematge de Vectors", "Response AutoCopy to Clipboard": "Resposta AutoCopiar al Portapapers", @@ -425,6 +442,7 @@ "Search a model": "Cerca un model", "Search Chats": "Cercar xats", "Search Documents": "Cerca Documents", + "Search Functions": "", "Search Models": "Models de cerca", "Search Prompts": "Cerca Prompts", "Search Query Generation Prompt": "", @@ -475,6 +493,7 @@ "short-summary": "resum curt", "Show": "Mostra", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Mostra dreceres", "Showcased creativity": "Mostra la creativitat", "sidebar": "barra lateral", @@ -496,6 +515,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", @@ -507,9 +527,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "El puntuatge ha de ser un valor entre 0.0 (0%) i 1.0 (100%).", "Theme": "Tema", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Això assegura que les teves converses valuoses queden segurament guardades a la teva base de dades backend. Gràcies!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "Aquesta configuració no es sincronitza entre navegadors ni dispositius.", + "This will delete": "", "Thorough explanation": "Explacació exhaustiva", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Consell: Actualitza diversos espais de variables consecutivament prement la tecla de tabulació en l'entrada del xat després de cada reemplaçament.", "Title": "Títol", @@ -523,6 +545,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "a l'entrada del xat.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Avui", "Toggle settings": "Commuta configuracions", @@ -538,10 +561,13 @@ "Type": "Tipus", "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", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Actualitza i Copia enllaç", "Update password": "Actualitza contrasenya", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "Puja un model GGUF", "Upload Files": "Pujar fitxers", "Upload Pipeline": "", @@ -560,6 +586,7 @@ "variable": "variable", "variable to have them replaced with clipboard content.": "variable per tenir-les reemplaçades amb el contingut del porta-retalls.", "Version": "Versió", + "Voice": "", "Warning": "Advertiment", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Avís: Si actualitzeu o canvieu el model d'incrustació, haureu de tornar a importar tots els documents.", "Web": "Web", @@ -569,7 +596,6 @@ "Web Search": "Cercador web", "Web Search Engine": "Cercador web", "Webhook URL": "URL del webhook", - "WebUI Add-ons": "Complements de WebUI", "WebUI Settings": "Configuració de WebUI", "WebUI will make requests to": "WebUI farà peticions a", "What’s New in": "Què hi ha de Nou en", diff --git a/src/lib/i18n/locales/ceb-PH/translation.json b/src/lib/i18n/locales/ceb-PH/translation.json index 4b9ab537f3..927800e88c 100644 --- a/src/lib/i18n/locales/ceb-PH/translation.json +++ b/src/lib/i18n/locales/ceb-PH/translation.json @@ -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", @@ -81,6 +82,7 @@ "Capabilities": "", "Change Password": "Usba ang password", "Chat": "Panaghisgot", + "Chat Background Image": "", "Chat Bubble UI": "", "Chat direction": "", "Chat History": "Kasaysayan sa chat", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "I-klik dinhi alang sa tabang.", "Click here to": "", + "Click here to download user import template file.": "", "Click here to select": "I-klik dinhi aron makapili", "Click here to select a csv file.": "", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "", "Command": "Pag-order", "Concurrent Requests": "", + "Confirm": "", "Confirm Password": "Kumpirma ang password", + "Confirm your action": "", "Connections": "Mga koneksyon", "Contact Admin for WebUI Access": "", "Content": "Kontento", @@ -130,6 +135,8 @@ "Create new secret key": "", "Created at": "Gihimo ang", "Created At": "", + "Created by": "", + "CSV Import": "", "Current Model": "Kasamtangang modelo", "Current Password": "Kasamtangang Password", "Custom": "Custom", @@ -151,6 +158,7 @@ "Delete All Chats": "", "Delete chat": "Pagtangtang sa panaghisgot", "Delete Chat": "", + "Delete chat?": "", "delete this link": "", "Delete User": "", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} gipapas", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "I-export ang mga chat", "Export Documents Mapping": "I-export ang pagmapa sa dokumento", + "Export Functions": "", "Export Models": "", "Export Prompts": "Export prompts", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "", "Feel free to add specific details": "", + "File": "", "File Mode": "File mode", "File not found.": "Wala makit-an ang file.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "", "Fluidly stream large external response chunks": "Hapsay nga paghatud sa daghang mga tipik sa eksternal nga mga tubag", "Focus chat input": "Pag-focus sa entry sa diskusyon", "Followed instructions perfectly": "", + "Form": "", "Format your variables using square brackets like this:": "I-format ang imong mga variable gamit ang square brackets sama niini:", "Frequency Penalty": "", + "Functions": "", "General": "Heneral", "General Settings": "kinatibuk-ang mga setting", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Maayong buntag, {{name}}", "Help": "", "Hide": "Tagoa", + "Hide Model": "", "How can I help you today?": "Unsaon nako pagtabang kanimo karon?", "Hybrid Search": "", "Image Generation (Experimental)": "Pagmugna og hulagway (Eksperimento)", @@ -262,6 +276,7 @@ "Images": "Mga hulagway", "Import Chats": "Import nga mga chat", "Import Documents Mapping": "Import nga pagmapa sa dokumento", + "Import Functions": "", "Import Models": "", "Import Prompts": "Import prompt", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Ang alphanumeric nga mga karakter ug hyphen lang ang gitugotan sa command string.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Oops! ", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oops! ", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oops! ", "Open": "Bukas", "Open AI": "Buksan ang AI", @@ -406,6 +422,7 @@ "Reranking Model": "", "Reranking model disabled": "", "Reranking model set to \"{{reranking_model}}\"": "", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "I-reset ang pagtipig sa vector", "Response AutoCopy to Clipboard": "Awtomatikong kopya sa tubag sa clipboard", @@ -425,6 +442,7 @@ "Search a model": "", "Search Chats": "", "Search Documents": "Pangitaa ang mga dokumento", + "Search Functions": "", "Search Models": "", "Search Prompts": "Pangitaa ang mga prompt", "Search Query Generation Prompt": "", @@ -474,6 +492,7 @@ "short-summary": "mubo nga summary", "Show": "Pagpakita", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Ipakita ang mga shortcut", "Showcased creativity": "", "sidebar": "lateral bar", @@ -495,6 +514,7 @@ "System": "Sistema", "System Prompt": "Madasig nga Sistema", "Tags": "Mga tag", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "", "Temperature": "Temperatura", @@ -506,9 +526,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "", "Theme": "Tema", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Kini nagsiguro nga ang imong bililhon nga mga panag-istoryahanay luwas nga natipig sa imong backend database. ", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "Kini nga setting wala mag-sync tali sa mga browser o device.", + "This will delete": "", "Thorough explanation": "", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Sugyot: Pag-update sa daghang variable nga lokasyon nga sunud-sunod pinaagi sa pagpindot sa tab key sa chat entry pagkahuman sa matag puli.", "Title": "Titulo", @@ -522,6 +544,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "sa entrada sa iring.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "", "Toggle settings": "I-toggle ang mga setting", @@ -537,10 +560,13 @@ "Type": "", "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", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "", "Update password": "I-update ang password", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "Pag-upload ug modelo sa GGUF", "Upload Files": "", "Upload Pipeline": "", @@ -559,6 +585,7 @@ "variable": "variable", "variable to have them replaced with clipboard content.": "variable aron pulihan kini sa mga sulud sa clipboard.", "Version": "Bersyon", + "Voice": "", "Warning": "", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "", "Web": "Web", @@ -568,7 +595,6 @@ "Web Search": "", "Web Search Engine": "", "Webhook URL": "", - "WebUI Add-ons": "Mga add-on sa WebUI", "WebUI Settings": "Mga Setting sa WebUI", "WebUI will make requests to": "Ang WebUI maghimo mga hangyo sa", "What’s New in": "Unsay bag-o sa", diff --git a/src/lib/i18n/locales/de-DE/translation.json b/src/lib/i18n/locales/de-DE/translation.json index be41f0bbd4..a65ea6d22e 100644 --- a/src/lib/i18n/locales/de-DE/translation.json +++ b/src/lib/i18n/locales/de-DE/translation.json @@ -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", @@ -81,6 +82,7 @@ "Capabilities": "Fähigkeiten", "Change Password": "Passwort ändern", "Chat": "Chat", + "Chat Background Image": "", "Chat Bubble UI": "Chat Bubble UI", "Chat direction": "Chat Richtung", "Chat History": "Chat Verlauf", @@ -97,6 +99,7 @@ "Clear memory": "Memory löschen", "Click here for help.": "Klicke hier für Hilfe.", "Click here to": "Klicke hier, um", + "Click here to download user import template file.": "", "Click here to select": "Klicke hier um auszuwählen", "Click here to select a csv file.": "Klicke hier um eine CSV-Datei auszuwählen.", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "ComfyUI Base URL wird benötigt.", "Command": "Befehl", "Concurrent Requests": "Gleichzeitige Anforderungen", + "Confirm": "", "Confirm Password": "Passwort bestätigen", + "Confirm your action": "", "Connections": "Verbindungen", "Contact Admin for WebUI Access": "", "Content": "Info", @@ -130,6 +135,8 @@ "Create new secret key": "Neuen API Schlüssel erstellen", "Created at": "Erstellt am", "Created At": "Erstellt am", + "Created by": "", + "CSV Import": "", "Current Model": "Aktuelles Modell", "Current Password": "Aktuelles Passwort", "Custom": "Benutzerdefiniert", @@ -151,6 +158,7 @@ "Delete All Chats": "Alle Chats löschen", "Delete chat": "Chat löschen", "Delete Chat": "Chat löschen", + "Delete chat?": "", "delete this link": "diesen Link zu löschen", "Delete User": "Benutzer löschen", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} gelöscht", @@ -224,6 +232,7 @@ "Export chat (.json)": "Chat exportieren (.json)", "Export Chats": "Chats exportieren", "Export Documents Mapping": "Dokumentenmapping exportieren", + "Export Functions": "", "Export Models": "Modelle exportieren", "Export Prompts": "Prompts exportieren", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "Fehler beim Aktualisieren der Einstellungen", "February": "Februar", "Feel free to add specific details": "Ergänze Details.", + "File": "", "File Mode": "File Modus", "File not found.": "Datei nicht gefunden.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Fingerprint spoofing erkannt: Initialen können nicht als Avatar verwendet werden. Es wird auf das Standardprofilbild zurückgegriffen.", "Fluidly stream large external response chunks": "Große externe Antwortblöcke flüssig streamen", "Focus chat input": "Chat-Eingabe fokussieren", "Followed instructions perfectly": "Anweisungen perfekt befolgt", + "Form": "", "Format your variables using square brackets like this:": "Formatiere deine Variablen mit eckigen Klammern wie folgt:", "Frequency Penalty": "Frequenz-Strafe", + "Functions": "", "General": "Allgemein", "General Settings": "Allgemeine Einstellungen", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Hallo, {{name}}", "Help": "Hilfe", "Hide": "Verbergen", + "Hide Model": "", "How can I help you today?": "Wie kann ich dir heute helfen?", "Hybrid Search": "Hybride Suche", "Image Generation (Experimental)": "Bildgenerierung (experimentell)", @@ -262,6 +276,7 @@ "Images": "Bilder", "Import Chats": "Chats importieren", "Import Documents Mapping": "Dokumentenmapping importieren", + "Import Functions": "", "Import Models": "Modelle importieren", "Import Prompts": "Prompts importieren", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Nur alphanumerische Zeichen und Bindestriche sind im Befehlsstring erlaubt.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Hoppla! Warte noch einen Moment! Die Dateien sind noch im der Verarbeitung. Bitte habe etwas Geduld und wir informieren Dich, sobald sie bereit sind.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Hoppla! Es sieht so aus, als wäre die URL ungültig. Bitte überprüfe sie und versuche es nochmal.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Hoppla! du verwendest eine nicht unterstützte Methode (nur Frontend). Bitte stelle die WebUI vom Backend aus bereit.", "Open": "Öffne", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "Reranking Modell", "Reranking model disabled": "Rranking Modell deaktiviert", "Reranking model set to \"{{reranking_model}}\"": "Reranking Modell auf \"{{reranking_model}}\" gesetzt", + "Reset": "", "Reset Upload Directory": "Uploadverzeichnis löschen", "Reset Vector Storage": "Vektorspeicher zurücksetzen", "Response AutoCopy to Clipboard": "Antwort automatisch in die Zwischenablage kopieren", @@ -425,6 +442,7 @@ "Search a model": "Nach einem Modell suchen", "Search Chats": "Chats durchsuchen", "Search Documents": "Dokumente suchen", + "Search Functions": "", "Search Models": "Modelle suchen", "Search Prompts": "Prompts suchen", "Search Query Generation Prompt": "", @@ -474,6 +492,7 @@ "short-summary": "kurze-zusammenfassung", "Show": "Anzeigen", "Show Admin Details in Account Pending Overlay": "Admin-Details im Account-Pending-Overlay anzeigen", + "Show Model": "", "Show shortcuts": "Verknüpfungen anzeigen", "Showcased creativity": "Kreativität zur Schau gestellt", "sidebar": "Seitenleiste", @@ -495,6 +514,7 @@ "System": "System", "System Prompt": "System-Prompt", "Tags": "Tags", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "Erzähl uns mehr", "Temperature": "Temperatur", @@ -506,9 +526,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Der Score sollte ein Wert zwischen 0,0 (0 %) und 1,0 (100 %) sein.", "Theme": "Design", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Dadurch werden deine wertvollen Unterhaltungen sicher in der Backend-Datenbank gespeichert. Vielen Dank!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "Diese Einstellung wird nicht zwischen Browsern oder Geräten synchronisiert.", + "This will delete": "", "Thorough explanation": "Genaue Erklärung", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Tipp: Aktualisiere mehrere Variablen nacheinander, indem du nach jeder Aktualisierung die Tabulatortaste im Chat-Eingabefeld drückst.", "Title": "Titel", @@ -522,6 +544,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "to chat input.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Heute", "Toggle settings": "Einstellungen umschalten", @@ -537,10 +560,13 @@ "Type": "Art", "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.", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Erneuern und kopieren", "Update password": "Passwort aktualisieren", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "GGUF Model hochladen", "Upload Files": "Dateien hochladen", "Upload Pipeline": "", @@ -559,6 +585,7 @@ "variable": "Variable", "variable to have them replaced with clipboard content.": "Variable, um den Inhalt der Zwischenablage beim Nutzen des Prompts zu ersetzen.", "Version": "Version", + "Voice": "", "Warning": "Warnung", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Warnung: Wenn du dein Einbettungsmodell aktualisierst oder änderst, musst du alle Dokumente erneut importieren.", "Web": "Web", @@ -568,7 +595,6 @@ "Web Search": "Websuche", "Web Search Engine": "Web-Suchmaschine", "Webhook URL": "Webhook URL", - "WebUI Add-ons": "WebUI-Add-Ons", "WebUI Settings": "WebUI-Einstellungen", "WebUI will make requests to": "Wenn aktiviert sendet WebUI externe Anfragen an", "What’s New in": "Was gibt's Neues in", diff --git a/src/lib/i18n/locales/dg-DG/translation.json b/src/lib/i18n/locales/dg-DG/translation.json index 761c81025a..6752bacd32 100644 --- a/src/lib/i18n/locales/dg-DG/translation.json +++ b/src/lib/i18n/locales/dg-DG/translation.json @@ -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", @@ -81,6 +82,7 @@ "Capabilities": "", "Change Password": "Change Password", "Chat": "Chat", + "Chat Background Image": "", "Chat Bubble UI": "", "Chat direction": "", "Chat History": "Chat History", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "Click for help. Much assist.", "Click here to": "", + "Click here to download user import template file.": "", "Click here to select": "Click to select", "Click here to select a csv file.": "", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "", "Command": "Command", "Concurrent Requests": "", + "Confirm": "", "Confirm Password": "Confirm Password", + "Confirm your action": "", "Connections": "Connections", "Contact Admin for WebUI Access": "", "Content": "Content", @@ -130,6 +135,8 @@ "Create new secret key": "", "Created at": "Created at", "Created At": "", + "Created by": "", + "CSV Import": "", "Current Model": "Current Model", "Current Password": "Current Password", "Custom": "Custom", @@ -151,6 +158,7 @@ "Delete All Chats": "", "Delete chat": "Delete chat", "Delete Chat": "", + "Delete chat?": "", "delete this link": "", "Delete User": "", "Deleted {{deleteModelTag}}": "Deleted {{deleteModelTag}}", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "Export Barks", "Export Documents Mapping": "Export Mappings of Dogos", + "Export Functions": "", "Export Models": "", "Export Prompts": "Export Promptos", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "", "Feel free to add specific details": "", + "File": "", "File Mode": "Bark Mode", "File not found.": "Bark not found.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Fingerprint dogeing: Unable to use initials as avatar. Defaulting to default doge image.", "Fluidly stream large external response chunks": "Fluidly wow big chunks", "Focus chat input": "Focus chat bork", "Followed instructions perfectly": "", + "Form": "", "Format your variables using square brackets like this:": "Format variables using square brackets like wow:", "Frequency Penalty": "", + "Functions": "", "General": "Woweral", "General Settings": "General Doge Settings", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Much helo, {{name}}", "Help": "", "Hide": "Hide", + "Hide Model": "", "How can I help you today?": "How can I halp u today?", "Hybrid Search": "", "Image Generation (Experimental)": "Image Wow (Much Experiment)", @@ -262,6 +276,7 @@ "Images": "Wowmages", "Import Chats": "Import Barks", "Import Documents Mapping": "Import Doge Mapping", + "Import Functions": "", "Import Models": "", "Import Prompts": "Import Promptos", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Only wow characters and hyphens are allowed in the bork string.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oops! Looks like the URL is invalid. Please double-check and try again.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.", "Open": "Open", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "", "Reranking model disabled": "", "Reranking model set to \"{{reranking_model}}\"": "", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "Reset Vector Storage", "Response AutoCopy to Clipboard": "Copy Bark Auto Bark", @@ -425,6 +442,7 @@ "Search a model": "", "Search Chats": "", "Search Documents": "Search Documents much find", + "Search Functions": "", "Search Models": "", "Search Prompts": "Search Prompts much wow", "Search Query Generation Prompt": "", @@ -432,6 +450,8 @@ "Search Result Count": "", "Search Tools": "", "Searched {{count}} sites_one": "", + "Searched {{count}} sites_few": "", + "Searched {{count}} sites_many": "", "Searched {{count}} sites_other": "", "Searching \"{{searchQuery}}\"": "", "Searxng Query URL": "", @@ -474,6 +494,7 @@ "short-summary": "short-summary so short", "Show": "Show much show", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Show shortcuts much shortcut", "Showcased creativity": "", "sidebar": "sidebar much side", @@ -495,6 +516,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", @@ -506,9 +528,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "", "Theme": "Theme much theme", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "This ensures that your valuable conversations are securely saved to your backend database. Thank you! Much secure!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "This setting does not sync across browsers or devices. Very not sync.", + "This will delete": "", "Thorough explanation": "", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement. Much tip!", "Title": "Title very title", @@ -522,6 +546,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "to chat input. Very chat.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "", "Toggle settings": "Toggle settings much toggle", @@ -537,10 +562,13 @@ "Type": "", "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", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "", "Update password": "Update password much change", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "Upload a GGUF model very upload", "Upload Files": "", "Upload Pipeline": "", @@ -559,6 +587,7 @@ "variable": "variable very variable", "variable to have them replaced with clipboard content.": "variable to have them replaced with clipboard content. Very replace.", "Version": "Version much version", + "Voice": "", "Warning": "", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "", "Web": "Web very web", @@ -568,7 +597,6 @@ "Web Search": "", "Web Search Engine": "", "Webhook URL": "", - "WebUI Add-ons": "WebUI Add-ons very add-ons", "WebUI Settings": "WebUI Settings much settings", "WebUI will make requests to": "WebUI will make requests to much request", "What’s New in": "What’s New in much new", diff --git a/src/lib/i18n/locales/en-GB/translation.json b/src/lib/i18n/locales/en-GB/translation.json index 47f474b4a9..24de0b8ccd 100644 --- a/src/lib/i18n/locales/en-GB/translation.json +++ b/src/lib/i18n/locales/en-GB/translation.json @@ -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": "", @@ -81,6 +82,7 @@ "Capabilities": "", "Change Password": "", "Chat": "", + "Chat Background Image": "", "Chat Bubble UI": "", "Chat direction": "", "Chat History": "", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "", "Click here to": "", + "Click here to download user import template file.": "", "Click here to select": "", "Click here to select a csv file.": "", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "", "Command": "", "Concurrent Requests": "", + "Confirm": "", "Confirm Password": "", + "Confirm your action": "", "Connections": "", "Contact Admin for WebUI Access": "", "Content": "", @@ -130,6 +135,8 @@ "Create new secret key": "", "Created at": "", "Created At": "", + "Created by": "", + "CSV Import": "", "Current Model": "", "Current Password": "", "Custom": "", @@ -151,6 +158,7 @@ "Delete All Chats": "", "Delete chat": "", "Delete Chat": "", + "Delete chat?": "", "delete this link": "", "Delete User": "", "Deleted {{deleteModelTag}}": "", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "", "Export Documents Mapping": "", + "Export Functions": "", "Export Models": "", "Export Prompts": "", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "", "Feel free to add specific details": "", + "File": "", "File Mode": "", "File not found.": "", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "", "Fluidly stream large external response chunks": "", "Focus chat input": "", "Followed instructions perfectly": "", + "Form": "", "Format your variables using square brackets like this:": "", "Frequency Penalty": "", + "Functions": "", "General": "", "General Settings": "", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "", "Help": "", "Hide": "", + "Hide Model": "", "How can I help you today?": "", "Hybrid Search": "", "Image Generation (Experimental)": "", @@ -262,6 +276,7 @@ "Images": "", "Import Chats": "", "Import Documents Mapping": "", + "Import Functions": "", "Import Models": "", "Import Prompts": "", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "", "Open": "", "Open AI": "", @@ -406,6 +422,7 @@ "Reranking Model": "", "Reranking model disabled": "", "Reranking model set to \"{{reranking_model}}\"": "", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "", "Response AutoCopy to Clipboard": "", @@ -425,6 +442,7 @@ "Search a model": "", "Search Chats": "", "Search Documents": "", + "Search Functions": "", "Search Models": "", "Search Prompts": "", "Search Query Generation Prompt": "", @@ -474,6 +492,7 @@ "short-summary": "", "Show": "", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "", "Showcased creativity": "", "sidebar": "", @@ -495,6 +514,7 @@ "System": "", "System Prompt": "", "Tags": "", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "", "Temperature": "", @@ -506,9 +526,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "", "Theme": "", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "", + "This will delete": "", "Thorough explanation": "", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "", "Title": "", @@ -522,6 +544,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "", "Toggle settings": "", @@ -537,10 +560,13 @@ "Type": "", "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": "", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "", "Update password": "", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "", "Upload Files": "", "Upload Pipeline": "", @@ -559,6 +585,7 @@ "variable": "", "variable to have them replaced with clipboard content.": "", "Version": "", + "Voice": "", "Warning": "", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "", "Web": "", @@ -568,7 +595,6 @@ "Web Search": "", "Web Search Engine": "", "Webhook URL": "", - "WebUI Add-ons": "", "WebUI Settings": "", "WebUI will make requests to": "", "What’s New in": "", diff --git a/src/lib/i18n/locales/en-US/translation.json b/src/lib/i18n/locales/en-US/translation.json index 47f474b4a9..24de0b8ccd 100644 --- a/src/lib/i18n/locales/en-US/translation.json +++ b/src/lib/i18n/locales/en-US/translation.json @@ -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": "", @@ -81,6 +82,7 @@ "Capabilities": "", "Change Password": "", "Chat": "", + "Chat Background Image": "", "Chat Bubble UI": "", "Chat direction": "", "Chat History": "", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "", "Click here to": "", + "Click here to download user import template file.": "", "Click here to select": "", "Click here to select a csv file.": "", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "", "Command": "", "Concurrent Requests": "", + "Confirm": "", "Confirm Password": "", + "Confirm your action": "", "Connections": "", "Contact Admin for WebUI Access": "", "Content": "", @@ -130,6 +135,8 @@ "Create new secret key": "", "Created at": "", "Created At": "", + "Created by": "", + "CSV Import": "", "Current Model": "", "Current Password": "", "Custom": "", @@ -151,6 +158,7 @@ "Delete All Chats": "", "Delete chat": "", "Delete Chat": "", + "Delete chat?": "", "delete this link": "", "Delete User": "", "Deleted {{deleteModelTag}}": "", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "", "Export Documents Mapping": "", + "Export Functions": "", "Export Models": "", "Export Prompts": "", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "", "Feel free to add specific details": "", + "File": "", "File Mode": "", "File not found.": "", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "", "Fluidly stream large external response chunks": "", "Focus chat input": "", "Followed instructions perfectly": "", + "Form": "", "Format your variables using square brackets like this:": "", "Frequency Penalty": "", + "Functions": "", "General": "", "General Settings": "", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "", "Help": "", "Hide": "", + "Hide Model": "", "How can I help you today?": "", "Hybrid Search": "", "Image Generation (Experimental)": "", @@ -262,6 +276,7 @@ "Images": "", "Import Chats": "", "Import Documents Mapping": "", + "Import Functions": "", "Import Models": "", "Import Prompts": "", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "", "Open": "", "Open AI": "", @@ -406,6 +422,7 @@ "Reranking Model": "", "Reranking model disabled": "", "Reranking model set to \"{{reranking_model}}\"": "", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "", "Response AutoCopy to Clipboard": "", @@ -425,6 +442,7 @@ "Search a model": "", "Search Chats": "", "Search Documents": "", + "Search Functions": "", "Search Models": "", "Search Prompts": "", "Search Query Generation Prompt": "", @@ -474,6 +492,7 @@ "short-summary": "", "Show": "", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "", "Showcased creativity": "", "sidebar": "", @@ -495,6 +514,7 @@ "System": "", "System Prompt": "", "Tags": "", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "", "Temperature": "", @@ -506,9 +526,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "", "Theme": "", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "", + "This will delete": "", "Thorough explanation": "", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "", "Title": "", @@ -522,6 +544,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "", "Toggle settings": "", @@ -537,10 +560,13 @@ "Type": "", "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": "", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "", "Update password": "", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "", "Upload Files": "", "Upload Pipeline": "", @@ -559,6 +585,7 @@ "variable": "", "variable to have them replaced with clipboard content.": "", "Version": "", + "Voice": "", "Warning": "", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "", "Web": "", @@ -568,7 +595,6 @@ "Web Search": "", "Web Search Engine": "", "Webhook URL": "", - "WebUI Add-ons": "", "WebUI Settings": "", "WebUI will make requests to": "", "What’s New in": "", diff --git a/src/lib/i18n/locales/es-ES/translation.json b/src/lib/i18n/locales/es-ES/translation.json index 518643000d..2d0c279150 100644 --- a/src/lib/i18n/locales/es-ES/translation.json +++ b/src/lib/i18n/locales/es-ES/translation.json @@ -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", @@ -81,6 +82,7 @@ "Capabilities": "Capacidades", "Change Password": "Cambia la Contraseña", "Chat": "Chat", + "Chat Background Image": "", "Chat Bubble UI": "Burbuja de chat UI", "Chat direction": "Dirección del Chat", "Chat History": "Historial del Chat", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "Presiona aquí para obtener ayuda.", "Click here to": "Presiona aquí para", + "Click here to download user import template file.": "", "Click here to select": "Presiona aquí para seleccionar", "Click here to select a csv file.": "Presiona aquí para seleccionar un archivo csv.", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "ComfyUI Base URL es requerido.", "Command": "Comando", "Concurrent Requests": "Solicitudes simultáneas", + "Confirm": "", "Confirm Password": "Confirmar Contraseña", + "Confirm your action": "", "Connections": "Conexiones", "Contact Admin for WebUI Access": "", "Content": "Contenido", @@ -130,6 +135,8 @@ "Create new secret key": "Crear una nueva clave secreta", "Created at": "Creado en", "Created At": "Creado en", + "Created by": "", + "CSV Import": "", "Current Model": "Modelo Actual", "Current Password": "Contraseña Actual", "Custom": "Personalizado", @@ -151,6 +158,7 @@ "Delete All Chats": "Eliminar todos los chats", "Delete chat": "Borrar chat", "Delete Chat": "Borrar Chat", + "Delete chat?": "", "delete this link": "Borrar este enlace", "Delete User": "Borrar Usuario", "Deleted {{deleteModelTag}}": "Se borró {{deleteModelTag}}", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "Exportar Chats", "Export Documents Mapping": "Exportar el mapeo de documentos", + "Export Functions": "", "Export Models": "Modelos de exportación", "Export Prompts": "Exportar Prompts", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "Febrero", "Feel free to add specific details": "Libre de agregar detalles específicos", + "File": "", "File Mode": "Modo de archivo", "File not found.": "Archivo no encontrado.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Se detectó suplantación de huellas: No se pueden usar las iniciales como avatar. Por defecto se utiliza la imagen de perfil predeterminada.", "Fluidly stream large external response chunks": "Transmita con fluidez grandes fragmentos de respuesta externa", "Focus chat input": "Enfoca la entrada del chat", "Followed instructions perfectly": "Siguió las instrucciones perfectamente", + "Form": "", "Format your variables using square brackets like this:": "Formatea tus variables usando corchetes de la siguiente manera:", "Frequency Penalty": "Penalización de frecuencia", + "Functions": "", "General": "General", "General Settings": "Opciones Generales", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Hola, {{name}}", "Help": "Ayuda", "Hide": "Esconder", + "Hide Model": "", "How can I help you today?": "¿Cómo puedo ayudarte hoy?", "Hybrid Search": "Búsqueda Híbrida", "Image Generation (Experimental)": "Generación de imágenes (experimental)", @@ -262,6 +276,7 @@ "Images": "Imágenes", "Import Chats": "Importar chats", "Import Documents Mapping": "Importar Mapeo de Documentos", + "Import Functions": "", "Import Models": "Importar modelos", "Import Prompts": "Importar Prompts", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Sólo se permiten caracteres alfanuméricos y guiones en la cadena de comando.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "¡Ups! ¡Agárrate fuerte! Tus archivos todavía están en el horno de procesamiento. Los estamos cocinando a la perfección. Tenga paciencia y le avisaremos una vez que estén listos.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "¡Ups! Parece que la URL no es válida. Vuelva a verificar e inténtelo nuevamente.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "¡Ups! Estás utilizando un método no compatible (solo frontend). Por favor ejecute la WebUI desde el backend.", "Open": "Abrir", "Open AI": "Abrir AI", @@ -406,6 +422,7 @@ "Reranking Model": "Modelo de reranking", "Reranking model disabled": "Modelo de reranking deshabilitado", "Reranking model set to \"{{reranking_model}}\"": "Modelo de reranking establecido en \"{{reranking_model}}\"", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "Restablecer almacenamiento vectorial", "Response AutoCopy to Clipboard": "Copiar respuesta automáticamente al portapapeles", @@ -425,6 +442,7 @@ "Search a model": "Buscar un modelo", "Search Chats": "Chats de búsqueda", "Search Documents": "Buscar Documentos", + "Search Functions": "", "Search Models": "Modelos de búsqueda", "Search Prompts": "Buscar Prompts", "Search Query Generation Prompt": "", @@ -475,6 +493,7 @@ "short-summary": "resumen-corto", "Show": "Mostrar", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Mostrar atajos", "Showcased creativity": "Mostrar creatividad", "sidebar": "barra lateral", @@ -496,6 +515,7 @@ "System": "Sistema", "System Prompt": "Prompt del sistema", "Tags": "Etiquetas", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "Dinos más:", "Temperature": "Temperatura", @@ -507,9 +527,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "El puntaje debe ser un valor entre 0.0 (0%) y 1.0 (100%).", "Theme": "Tema", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Esto garantiza que sus valiosas conversaciones se guarden de forma segura en su base de datos en el backend. ¡Gracias!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "Esta configuración no se sincroniza entre navegadores o dispositivos.", + "This will delete": "", "Thorough explanation": "Explicación exhaustiva", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Consejo: Actualice múltiples variables consecutivamente presionando la tecla tab en la entrada del chat después de cada reemplazo.", "Title": "Título", @@ -523,6 +545,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "a la entrada del chat.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Hoy", "Toggle settings": "Alternar configuración", @@ -538,10 +561,13 @@ "Type": "Tipo", "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", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Actualizar y copiar enlace", "Update password": "Actualizar contraseña", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "Subir un modelo GGUF", "Upload Files": "Subir archivos", "Upload Pipeline": "", @@ -560,6 +586,7 @@ "variable": "variable", "variable to have them replaced with clipboard content.": "variable para reemplazarlos con el contenido del portapapeles.", "Version": "Versión", + "Voice": "", "Warning": "Advertencia", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Advertencia: Si actualiza o cambia su modelo de inserción, necesitará volver a importar todos los documentos.", "Web": "Web", @@ -569,7 +596,6 @@ "Web Search": "Búsqueda en la Web", "Web Search Engine": "Motor de búsqueda web", "Webhook URL": "Webhook URL", - "WebUI Add-ons": "WebUI Add-ons", "WebUI Settings": "Configuración del WebUI", "WebUI will make requests to": "WebUI realizará solicitudes a", "What’s New in": "Novedades en", diff --git a/src/lib/i18n/locales/fa-IR/translation.json b/src/lib/i18n/locales/fa-IR/translation.json index d4b70cb689..d6cab93473 100644 --- a/src/lib/i18n/locales/fa-IR/translation.json +++ b/src/lib/i18n/locales/fa-IR/translation.json @@ -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": "یک دستیار", @@ -81,6 +82,7 @@ "Capabilities": "قابلیت", "Change Password": "تغییر رمز عبور", "Chat": "گپ", + "Chat Background Image": "", "Chat Bubble UI": "UI\u200cی\u200c گفتگو\u200c", "Chat direction": "جهت\u200cگفتگو", "Chat History": "تاریخچه\u200cی گفتگو", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "برای کمک اینجا را کلیک کنید.", "Click here to": "برای کمک اینجا را کلیک کنید.", + "Click here to download user import template file.": "", "Click here to select": "برای انتخاب اینجا کلیک کنید", "Click here to select a csv file.": "برای انتخاب یک فایل csv اینجا را کلیک کنید.", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "URL پایه کومیوآی الزامی است.", "Command": "دستور", "Concurrent Requests": "درخواست های همزمان", + "Confirm": "", "Confirm Password": "تایید رمز عبور", + "Confirm your action": "", "Connections": "ارتباطات", "Contact Admin for WebUI Access": "", "Content": "محتوا", @@ -130,6 +135,8 @@ "Create new secret key": "ساخت کلید gehez جدید", "Created at": "ایجاد شده در", "Created At": "ایجاد شده در", + "Created by": "", + "CSV Import": "", "Current Model": "مدل فعلی", "Current Password": "رمز عبور فعلی", "Custom": "دلخواه", @@ -151,6 +158,7 @@ "Delete All Chats": "حذف همه گفتگوها", "Delete chat": "حذف گپ", "Delete Chat": "حذف گپ", + "Delete chat?": "", "delete this link": "حذف این لینک", "Delete User": "حذف کاربر", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} پاک شد", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "اکسپورت از گپ\u200cها", "Export Documents Mapping": "اکسپورت از نگاشت اسناد", + "Export Functions": "", "Export Models": "مدل های صادرات", "Export Prompts": "اکسپورت از پرامپت\u200cها", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "فوری", "Feel free to add specific details": "اگر به دلخواه، معلومات خاصی اضافه کنید", + "File": "", "File Mode": "حالت فایل", "File not found.": "فایل یافت نشد.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "فانگ سرفیس شناسایی شد: نمی توان از نمایه شما به عنوان آواتار استفاده کرد. پیش فرض به عکس پروفایل پیش فرض برگشت داده شد.", "Fluidly stream large external response chunks": "تکه های پاسخ خارجی بزرگ را به صورت سیال پخش کنید", "Focus chat input": "فوکوس کردن ورودی گپ", "Followed instructions perfectly": "دستورالعمل ها را کاملا دنبال کرد", + "Form": "", "Format your variables using square brackets like this:": "متغیرهای خود را با استفاده از براکت مربع به شکل زیر قالب بندی کنید:", "Frequency Penalty": "مجازات فرکانس", + "Functions": "", "General": "عمومی", "General Settings": "تنظیمات عمومی", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "سلام، {{name}}", "Help": "کمک", "Hide": "پنهان", + "Hide Model": "", "How can I help you today?": "امروز چطور می توانم کمک تان کنم؟", "Hybrid Search": "جستجوی همزمان", "Image Generation (Experimental)": "تولید تصویر (آزمایشی)", @@ -262,6 +276,7 @@ "Images": "تصاویر", "Import Chats": "ایمپورت گپ\u200cها", "Import Documents Mapping": "ایمپورت نگاشت اسناد", + "Import Functions": "", "Import Models": "واردات مدلها", "Import Prompts": "ایمپورت پرامپت\u200cها", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "فقط کاراکترهای الفبایی و خط فاصله در رشته فرمان مجاز هستند.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "اوه! فایل های شما هنوز در فر پردازش هستند. ما آنها را کامل می پزیم. لطفا صبور باشید، به محض آماده شدن به شما اطلاع خواهیم داد.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "اوه! به نظر می رسد URL نامعتبر است. لطفاً دوباره بررسی کنید و دوباره امتحان کنید.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "اوه! شما از یک روش پشتیبانی نشده (فقط frontend) استفاده می کنید. لطفاً WebUI را از بکند اجرا کنید.", "Open": "باز", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "مدل ری\u200cشناسی مجدد غیرفعال است", "Reranking model disabled": "مدل ری\u200cشناسی مجدد غیرفعال است", "Reranking model set to \"{{reranking_model}}\"": "مدل ری\u200cشناسی مجدد به \"{{reranking_model}}\" تنظیم شده است", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "بازنشانی ذخیره سازی برداری", "Response AutoCopy to Clipboard": "کپی خودکار پاسخ به کلیپ بورد", @@ -425,6 +442,7 @@ "Search a model": "جستجوی مدل", "Search Chats": "جستجو گپ ها", "Search Documents": "جستجوی اسناد", + "Search Functions": "", "Search Models": "مدل های جستجو", "Search Prompts": "جستجوی پرامپت\u200cها", "Search Query Generation Prompt": "", @@ -474,6 +492,7 @@ "short-summary": "خلاصه کوتاه", "Show": "نمایش", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "نمایش میانبرها", "Showcased creativity": "ایده\u200cآفرینی", "sidebar": "نوار کناری", @@ -495,6 +514,7 @@ "System": "سیستم", "System Prompt": "پرامپت سیستم", "Tags": "تگ\u200cها", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "بیشتر بگویید:", "Temperature": "دما", @@ -506,9 +526,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "امتیاز باید یک مقدار بین 0.0 (0%) و 1.0 (100%) باشد.", "Theme": "قالب", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "این تضمین می کند که مکالمات ارزشمند شما به طور ایمن در پایگاه داده بکند ذخیره می شود. تشکر!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "این تنظیم در مرورگرها یا دستگاه\u200cها همگام\u200cسازی نمی\u200cشود.", + "This will delete": "", "Thorough explanation": "توضیح کامل", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "با فشردن کلید Tab در ورودی چت پس از هر بار تعویض، چندین متغیر را به صورت متوالی به روزرسانی کنید.", "Title": "عنوان", @@ -522,6 +544,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "در ورودی گپ.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "امروز", "Toggle settings": "نمایش/عدم نمایش تنظیمات", @@ -537,10 +560,13 @@ "Type": "نوع", "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}}' ناشناخته است، به عنوان یک فایل متنی ساده با آن برخورد می شود.", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "به روزرسانی و کپی لینک", "Update password": "به روزرسانی رمزعبور", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "آپلود یک مدل GGUF", "Upload Files": "بارگذاری پروندهها", "Upload Pipeline": "", @@ -559,6 +585,7 @@ "variable": "متغیر", "variable to have them replaced with clipboard content.": "متغیر برای جایگزینی آنها با محتوای کلیپ بورد.", "Version": "نسخه", + "Voice": "", "Warning": "هشدار", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "هشدار: اگر شما به روز کنید یا تغییر دهید مدل شما، باید تمام سند ها را مجددا وارد کنید.", "Web": "وب", @@ -568,7 +595,6 @@ "Web Search": "جستجوی وب", "Web Search Engine": "موتور جستجوی وب", "Webhook URL": "URL وبهوک", - "WebUI Add-ons": "WebUI افزونه\u200cهای", "WebUI Settings": "تنظیمات WebUI", "WebUI will make requests to": "WebUI درخواست\u200cها را ارسال خواهد کرد به", "What’s New in": "موارد جدید در", diff --git a/src/lib/i18n/locales/fi-FI/translation.json b/src/lib/i18n/locales/fi-FI/translation.json index dcf298cbd0..2d500d44ce 100644 --- a/src/lib/i18n/locales/fi-FI/translation.json +++ b/src/lib/i18n/locales/fi-FI/translation.json @@ -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", @@ -81,6 +82,7 @@ "Capabilities": "Ominaisuuksia", "Change Password": "Vaihda salasana", "Chat": "Keskustelu", + "Chat Background Image": "", "Chat Bubble UI": "Keskustelu-pallojen käyttöliittymä", "Chat direction": "Keskustelun suunta", "Chat History": "Keskusteluhistoria", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "Klikkaa tästä saadaksesi apua.", "Click here to": "Klikkaa tästä", + "Click here to download user import template file.": "", "Click here to select": "Klikkaa tästä valitaksesi", "Click here to select a csv file.": "Klikkaa tästä valitaksesi CSV-tiedosto.", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "ComfyUI-perus-URL vaaditaan.", "Command": "Komento", "Concurrent Requests": "Samanaikaiset pyynnöt", + "Confirm": "", "Confirm Password": "Vahvista salasana", + "Confirm your action": "", "Connections": "Yhteydet", "Contact Admin for WebUI Access": "", "Content": "Sisältö", @@ -130,6 +135,8 @@ "Create new secret key": "Luo uusi salainen avain", "Created at": "Luotu", "Created At": "Luotu", + "Created by": "", + "CSV Import": "", "Current Model": "Nykyinen malli", "Current Password": "Nykyinen salasana", "Custom": "Mukautettu", @@ -151,6 +158,7 @@ "Delete All Chats": "Poista kaikki keskustelut", "Delete chat": "Poista keskustelu", "Delete Chat": "Poista keskustelu", + "Delete chat?": "", "delete this link": "poista tämä linkki", "Delete User": "Poista käyttäjä", "Deleted {{deleteModelTag}}": "Poistettu {{deleteModelTag}}", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "Vie keskustelut", "Export Documents Mapping": "Vie asiakirjakartoitus", + "Export Functions": "", "Export Models": "Vie malleja", "Export Prompts": "Vie kehotteet", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "helmikuu", "Feel free to add specific details": "Voit lisätä tarkempia tietoja", + "File": "", "File Mode": "Tiedostotila", "File not found.": "Tiedostoa ei löytynyt.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Sormenjäljen väärentäminen havaittu: Ei voi käyttää alkukirjaimia avatarina. Käytetään oletusprofiilikuvaa.", "Fluidly stream large external response chunks": "Virtaa suuria ulkoisia vastausosia joustavasti", "Focus chat input": "Fokusoi syöttökenttään", "Followed instructions perfectly": "Noudatti ohjeita täydellisesti", + "Form": "", "Format your variables using square brackets like this:": "Muotoile muuttujat hakasulkeilla näin:", "Frequency Penalty": "Taajuussakko", + "Functions": "", "General": "Yleinen", "General Settings": "Yleisasetukset", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Terve, {{name}}", "Help": "Apua", "Hide": "Piilota", + "Hide Model": "", "How can I help you today?": "Kuinka voin auttaa tänään?", "Hybrid Search": "Hybridihaku", "Image Generation (Experimental)": "Kuvagenerointi (kokeellinen)", @@ -262,6 +276,7 @@ "Images": "Kuvat", "Import Chats": "Tuo keskustelut", "Import Documents Mapping": "Tuo asiakirjakartoitus", + "Import Functions": "", "Import Models": "Mallien tuominen", "Import Prompts": "Tuo kehotteita", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Vain kirjaimet, numerot ja väliviivat ovat sallittuja komentosarjassa.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Hetki pieni, tiedostosi ovat yhä leivinuunissa. Odota kärsivällisesti, ja ilmoitamme, kun ne ovat valmiita.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Hups! Näyttää siltä, että URL on virheellinen. Tarkista se ja yritä uudelleen.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Hupsista! Käytät ei-tuettua menetelmää. WebUI pitää palvella backendista.", "Open": "Avaa", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "Uudelleenpisteytysmalli", "Reranking model disabled": "Uudelleenpisteytysmalli poistettu käytöstä", "Reranking model set to \"{{reranking_model}}\"": "\"{{reranking_model}}\" valittu uudelleenpisteytysmalliksi", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "Tyhjennä vektorivarasto", "Response AutoCopy to Clipboard": "Vastauksen automaattikopiointi leikepöydälle", @@ -425,6 +442,7 @@ "Search a model": "Hae mallia", "Search Chats": "Etsi chatteja", "Search Documents": "Hae asiakirjoja", + "Search Functions": "", "Search Models": "Hae malleja", "Search Prompts": "Hae kehotteita", "Search Query Generation Prompt": "", @@ -474,6 +492,7 @@ "short-summary": "lyhyt-yhteenveto", "Show": "Näytä", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Näytä pikanäppäimet", "Showcased creativity": "Näytti luovuutta", "sidebar": "sivupalkki", @@ -495,6 +514,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", @@ -506,9 +526,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Pisteytyksen tulee olla arvo välillä 0.0 (0%) ja 1.0 (100%).", "Theme": "Teema", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Tämä varmistaa, että arvokkaat keskustelusi tallennetaan turvallisesti backend-tietokantaasi. Kiitos!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "Tämä asetus ei synkronoidu selainten tai laitteiden välillä.", + "This will delete": "", "Thorough explanation": "Perusteellinen selitys", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Vinkki: Päivitä useita muuttujapaikkoja peräkkäin painamalla tabulaattoria keskustelusyötteessä jokaisen korvauksen jälkeen.", "Title": "Otsikko", @@ -522,6 +544,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "keskustelusyötteeseen.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Tänään", "Toggle settings": "Kytke asetukset", @@ -537,10 +560,13 @@ "Type": "Tyyppi", "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ä", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Päivitä ja kopioi linkki", "Update password": "Päivitä salasana", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "Lataa GGUF-malli", "Upload Files": "Lataa tiedostoja", "Upload Pipeline": "", @@ -559,6 +585,7 @@ "variable": "muuttuja", "variable to have them replaced with clipboard content.": "muuttuja korvataan leikepöydän sisällöllä.", "Version": "Versio", + "Voice": "", "Warning": "Varoitus", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Varoitus: Jos päivität tai vaihdat upotusmallia, sinun on tuotava kaikki asiakirjat uudelleen.", "Web": "Web", @@ -568,7 +595,6 @@ "Web Search": "Web-haku", "Web Search Engine": "Web-hakukone", "Webhook URL": "Webhook-URL", - "WebUI Add-ons": "WebUI-lisäosat", "WebUI Settings": "WebUI-asetukset", "WebUI will make requests to": "WebUI tekee pyyntöjä", "What’s New in": "Mitä uutta", diff --git a/src/lib/i18n/locales/fr-CA/translation.json b/src/lib/i18n/locales/fr-CA/translation.json index 22488c52e1..d1ae777136 100644 --- a/src/lib/i18n/locales/fr-CA/translation.json +++ b/src/lib/i18n/locales/fr-CA/translation.json @@ -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", @@ -81,6 +82,7 @@ "Capabilities": "Capacités", "Change Password": "Changer le mot de passe", "Chat": "Discussion", + "Chat Background Image": "", "Chat Bubble UI": "Bubble UI de discussion", "Chat direction": "Direction de discussion", "Chat History": "Historique des discussions", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "Cliquez ici pour de l'aide.", "Click here to": "Cliquez ici pour", + "Click here to download user import template file.": "", "Click here to select": "Cliquez ici pour sélectionner", "Click here to select a csv file.": "Cliquez ici pour sélectionner un fichier csv.", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "ComfyUI Base URL est requis.", "Command": "Commande", "Concurrent Requests": "Demandes simultanées", + "Confirm": "", "Confirm Password": "Confirmer le mot de passe", + "Confirm your action": "", "Connections": "Connexions", "Contact Admin for WebUI Access": "", "Content": "Contenu", @@ -130,6 +135,8 @@ "Create new secret key": "Créer une nouvelle clé secrète", "Created at": "Créé le", "Created At": "Créé le", + "Created by": "", + "CSV Import": "", "Current Model": "Modèle actuel", "Current Password": "Mot de passe actuel", "Custom": "Personnalisé", @@ -151,6 +158,7 @@ "Delete All Chats": "Supprimer tous les chats", "Delete chat": "Supprimer la discussion", "Delete Chat": "Supprimer la discussion", + "Delete chat?": "", "delete this link": "supprimer ce lien", "Delete User": "Supprimer l'utilisateur", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} supprimé", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "Exporter les discussions", "Export Documents Mapping": "Exporter le mappage des documents", + "Export Functions": "", "Export Models": "Modèles d’exportation", "Export Prompts": "Exporter les prompts", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "Février", "Feel free to add specific details": "Vous pouvez ajouter des détails spécifiques", + "File": "", "File Mode": "Mode fichier", "File not found.": "Fichier introuvable.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Détection de falsification de empreinte digitale\u00a0: impossible d'utiliser les initiales comme avatar. Par défaut, l'image de profil par défaut est utilisée.", "Fluidly stream large external response chunks": "Diffusez de manière fluide de gros morceaux de réponses externes", "Focus chat input": "Se concentrer sur l'entrée de la discussion", "Followed instructions perfectly": "Suivi des instructions parfaitement", + "Form": "", "Format your variables using square brackets like this:": "Formatez vos variables en utilisant des crochets comme ceci :", "Frequency Penalty": "Pénalité de fréquence", + "Functions": "", "General": "Général", "General Settings": "Paramètres généraux", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Bonjour, {{name}}", "Help": "Aide", "Hide": "Cacher", + "Hide Model": "", "How can I help you today?": "Comment puis-je vous aider aujourd'hui ?", "Hybrid Search": "Recherche hybride", "Image Generation (Experimental)": "Génération d'image (Expérimental)", @@ -262,6 +276,7 @@ "Images": "Images", "Import Chats": "Importer les discussions", "Import Documents Mapping": "Importer le mappage des documents", + "Import Functions": "", "Import Models": "Importer des modèles", "Import Prompts": "Importer les prompts", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Seuls les caractères alphanumériques et les tirets sont autorisés dans la chaîne de commande.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Oups ! Tenez bon ! Vos fichiers sont encore dans le four de traitement. Nous les préparons jusqu'à la perfection. Soyez patient et nous vous informerons dès qu'ils seront prêts.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oups ! Il semble que l'URL soit invalide. Merci de vérifier et réessayer.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oups ! Vous utilisez une méthode non prise en charge (frontal uniquement). Veuillez servir WebUI depuis le backend.", "Open": "Ouvrir", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "Modèle de reranking", "Reranking model disabled": "Modèle de reranking désactivé", "Reranking model set to \"{{reranking_model}}\"": "Modèle de reranking défini sur \"{{reranking_model}}\"", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "Réinitialiser le stockage vectoriel", "Response AutoCopy to Clipboard": "Copie automatique de la réponse vers le presse-papiers", @@ -425,6 +442,7 @@ "Search a model": "Rechercher un modèle", "Search Chats": "Rechercher des chats", "Search Documents": "Rechercher des documents", + "Search Functions": "", "Search Models": "Modèles de recherche", "Search Prompts": "Rechercher des prompts", "Search Query Generation Prompt": "", @@ -475,6 +493,7 @@ "short-summary": "résumé court", "Show": "Afficher", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Afficher les raccourcis", "Showcased creativity": "Créativité affichée", "sidebar": "barre latérale", @@ -496,6 +515,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", @@ -507,9 +527,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Le score doit être une valeur entre 0.0 (0%) et 1.0 (100%).", "Theme": "Thème", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Cela garantit que vos précieuses conversations sont enregistrées en toute sécurité dans votre base de données backend. Merci !", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "Ce réglage ne se synchronise pas entre les navigateurs ou les appareils.", + "This will delete": "", "Thorough explanation": "Explication approfondie", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Astuce : Mettez à jour plusieurs emplacements de variables consécutivement en appuyant sur la touche tabulation dans l'entrée de chat après chaque remplacement.", "Title": "Titre", @@ -523,6 +545,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "à l'entrée du chat.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Aujourd'hui", "Toggle settings": "Basculer les paramètres", @@ -538,10 +561,13 @@ "Type": "Type", "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", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Mettre à jour et copier le lien", "Update password": "Mettre à jour le mot de passe", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "Téléverser un modèle GGUF", "Upload Files": "Téléverser des fichiers", "Upload Pipeline": "", @@ -560,6 +586,7 @@ "variable": "variable", "variable to have them replaced with clipboard content.": "variable pour les remplacer par le contenu du presse-papiers.", "Version": "Version", + "Voice": "", "Warning": "Avertissement", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Attention : Si vous mettez à jour ou changez votre modèle d'intégration, vous devrez réimporter tous les documents.", "Web": "Web", @@ -569,7 +596,6 @@ "Web Search": "Recherche sur le Web", "Web Search Engine": "Moteur de recherche Web", "Webhook URL": "URL Webhook", - "WebUI Add-ons": "Add-ons WebUI", "WebUI Settings": "Paramètres WebUI", "WebUI will make requests to": "WebUI effectuera des demandes à", "What’s New in": "Quoi de neuf dans", diff --git a/src/lib/i18n/locales/fr-FR/translation.json b/src/lib/i18n/locales/fr-FR/translation.json index 1b7b2b14ee..af9304e588 100644 --- a/src/lib/i18n/locales/fr-FR/translation.json +++ b/src/lib/i18n/locales/fr-FR/translation.json @@ -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", @@ -81,6 +82,7 @@ "Capabilities": "Capacités", "Change Password": "Changer le mot de passe", "Chat": "Chat", + "Chat Background Image": "", "Chat Bubble UI": "UI Bulles de Chat", "Chat direction": "Direction du chat", "Chat History": "Historique du chat", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "Cliquez ici pour de l'aide.", "Click here to": "Cliquez ici pour", + "Click here to download user import template file.": "", "Click here to select": "Cliquez ici pour sélectionner", "Click here to select a csv file.": "Cliquez ici pour sélectionner un fichier csv.", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "L'URL de base ComfyUI est requise.", "Command": "Commande", "Concurrent Requests": "Demandes simultanées", + "Confirm": "", "Confirm Password": "Confirmer le mot de passe", + "Confirm your action": "", "Connections": "Connexions", "Contact Admin for WebUI Access": "", "Content": "Contenu", @@ -130,6 +135,8 @@ "Create new secret key": "Créer une nouvelle clé secrète", "Created at": "Créé le", "Created At": "Crée Le", + "Created by": "", + "CSV Import": "", "Current Model": "Modèle actuel", "Current Password": "Mot de passe actuel", "Custom": "Personnalisé", @@ -151,6 +158,7 @@ "Delete All Chats": "Supprimer toutes les discussions", "Delete chat": "Supprimer le chat", "Delete Chat": "Supprimer le Chat", + "Delete chat?": "", "delete this link": "supprimer ce lien", "Delete User": "Supprimer l'Utilisateur", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} supprimé", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "Exporter les Chats", "Export Documents Mapping": "Exporter la Correspondance des Documents", + "Export Functions": "", "Export Models": "Exporter les Modèles", "Export Prompts": "Exporter les Prompts", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "Février", "Feel free to add specific details": "N'hésitez pas à ajouter des détails spécifiques", + "File": "", "File Mode": "Mode Fichier", "File not found.": "Fichier non trouvé.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Usurpation d'empreinte digitale détectée : Impossible d'utiliser les initiales comme avatar. L'image de profil par défaut sera utilisée.", "Fluidly stream large external response chunks": "Diffusez de manière fluide de gros morceaux de réponses externes", "Focus chat input": "Concentrer sur l'entrée du chat", "Followed instructions perfectly": "A suivi les instructions parfaitement", + "Form": "", "Format your variables using square brackets like this:": "Formatez vos variables en utilisant des crochets comme ceci :", "Frequency Penalty": "Pénalité de fréquence", + "Functions": "", "General": "Général", "General Settings": "Paramètres Généraux", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Bonjour, {{name}}", "Help": "Aide", "Hide": "Cacher", + "Hide Model": "", "How can I help you today?": "Comment puis-je vous aider aujourd'hui ?", "Hybrid Search": "Recherche Hybride", "Image Generation (Experimental)": "Génération d'Image (Expérimental)", @@ -262,6 +276,7 @@ "Images": "Images", "Import Chats": "Importer les Chats", "Import Documents Mapping": "Importer la Correspondance des Documents", + "Import Functions": "", "Import Models": "Importer des Modèles", "Import Prompts": "Importer des Prompts", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Seuls les caractères alphanumériques et les tirets sont autorisés dans la chaîne de commande.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Oups ! Tenez bon ! Vos fichiers sont encore dans le four. Nous les cuisinons à la perfection. Soyez patient et nous vous informerons dès qu'ils seront prêts.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oups ! On dirait que l'URL est invalide. Vérifiez et réessayez.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oups ! Vous utilisez une méthode non-supportée (frontend uniquement). Veuillez également servir WebUI depuis le backend.", "Open": "Ouvrir", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "Modèle de Reclassement", "Reranking model disabled": "Modèle de Reclassement Désactivé", "Reranking model set to \"{{reranking_model}}\"": "Modèle de reclassement défini sur \"{{reranking_model}}\"", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "Réinitialiser le Stockage de Vecteur", "Response AutoCopy to Clipboard": "Copie Automatique de la Réponse dans le Presse-papiers", @@ -425,6 +442,7 @@ "Search a model": "Rechercher un modèle", "Search Chats": "Rechercher des chats", "Search Documents": "Rechercher des Documents", + "Search Functions": "", "Search Models": "Rechercher des modèles", "Search Prompts": "Rechercher des Prompts", "Search Query Generation Prompt": "", @@ -475,6 +493,7 @@ "short-summary": "résumé court", "Show": "Montrer", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Afficher les raccourcis", "Showcased creativity": "Créativité affichée", "sidebar": "barre latérale", @@ -496,6 +515,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", @@ -507,9 +527,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Le score devrait avoir une valeur entre 0.0 (0%) et 1.0 (100%).", "Theme": "Thème", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Cela garantit que vos précieuses conversations sont en sécurité dans votre base de données. Merci !", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "Ce paramètre ne se synchronise pas entre les navigateurs ou les appareils.", + "This will delete": "", "Thorough explanation": "Explication détaillée", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Conseil : Mettez à jour plusieurs emplacements de variables consécutivement en appuyant sur la touche tab dans l'entrée de chat après chaque remplacement", "Title": "Titre", @@ -523,6 +545,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "à l'entrée du chat.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Aujourd'hui", "Toggle settings": "Basculer les paramètres", @@ -538,10 +561,13 @@ "Type": "Type", "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", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Mettre à Jour et Copier le Lien", "Update password": "Mettre à Jour le Mot de Passe", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "Téléverser un modèle GGUF", "Upload Files": "Téléverser des fichiers", "Upload Pipeline": "", @@ -560,6 +586,7 @@ "variable": "variable", "variable to have them replaced with clipboard content.": "variable pour les remplacer par le contenu du presse-papiers.", "Version": "Version", + "Voice": "", "Warning": "Avertissement", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Avertissement : Si vous mettez à jour ou modifier votre modèle d'embedding, vous devrez réimporter tous les documents.", "Web": "Web", @@ -569,7 +596,6 @@ "Web Search": "Recherche sur le Web", "Web Search Engine": "Moteur de recherche Web", "Webhook URL": "URL du Webhook", - "WebUI Add-ons": "Add-ons WebUI", "WebUI Settings": "Paramètres WebUI", "WebUI will make requests to": "WebUI effectuera des demandes à", "What’s New in": "Quoi de neuf dans", diff --git a/src/lib/i18n/locales/he-IL/translation.json b/src/lib/i18n/locales/he-IL/translation.json index 51e8de50e1..c4eac5caf1 100644 --- a/src/lib/i18n/locales/he-IL/translation.json +++ b/src/lib/i18n/locales/he-IL/translation.json @@ -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": "עוזר", @@ -81,6 +82,7 @@ "Capabilities": "יכולות", "Change Password": "שנה סיסמה", "Chat": "צ'אט", + "Chat Background Image": "", "Chat Bubble UI": "UI של תיבת הדיבור", "Chat direction": "כיוון צ'אט", "Chat History": "היסטוריית צ'אט", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "לחץ כאן לעזרה.", "Click here to": "לחץ כאן כדי", + "Click here to download user import template file.": "", "Click here to select": "לחץ כאן לבחירה", "Click here to select a csv file.": "לחץ כאן לבחירת קובץ csv.", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "נדרשת כתובת URL בסיסית של ComfyUI", "Command": "פקודה", "Concurrent Requests": "בקשות בו-זמניות", + "Confirm": "", "Confirm Password": "אשר סיסמה", + "Confirm your action": "", "Connections": "חיבורים", "Contact Admin for WebUI Access": "", "Content": "תוכן", @@ -130,6 +135,8 @@ "Create new secret key": "צור מפתח סודי חדש", "Created at": "נוצר ב", "Created At": "נוצר ב", + "Created by": "", + "CSV Import": "", "Current Model": "המודל הנוכחי", "Current Password": "הסיסמה הנוכחית", "Custom": "מותאם אישית", @@ -151,6 +158,7 @@ "Delete All Chats": "מחק את כל הצ'אטים", "Delete chat": "מחק צ'אט", "Delete Chat": "מחק צ'אט", + "Delete chat?": "", "delete this link": "מחק את הקישור הזה", "Delete User": "מחק משתמש", "Deleted {{deleteModelTag}}": "נמחק {{deleteModelTag}}", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "ייצוא צ'אטים", "Export Documents Mapping": "ייצוא מיפוי מסמכים", + "Export Functions": "", "Export Models": "ייצוא מודלים", "Export Prompts": "ייצוא פקודות", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "פברואר", "Feel free to add specific details": "נא להוסיף פרטים ספציפיים לפי רצון", + "File": "", "File Mode": "מצב קובץ", "File not found.": "הקובץ לא נמצא.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "התגלתה הזיית טביעת אצבע: לא ניתן להשתמש בראשי תיבות כאווטאר. משתמש בתמונת פרופיל ברירת מחדל.", "Fluidly stream large external response chunks": "שידור נתונים חיצוניים בקצב רציף", "Focus chat input": "מיקוד הקלט לצ'אט", "Followed instructions perfectly": "עקב אחר ההוראות במושלמות", + "Form": "", "Format your variables using square brackets like this:": "עצב את המשתנים שלך באמצעות סוגריים מרובעים כך:", "Frequency Penalty": "עונש תדירות", + "Functions": "", "General": "כללי", "General Settings": "הגדרות כלליות", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "שלום, {{name}}", "Help": "עזרה", "Hide": "הסתר", + "Hide Model": "", "How can I help you today?": "כיצד אוכל לעזור לך היום?", "Hybrid Search": "חיפוש היברידי", "Image Generation (Experimental)": "יצירת תמונות (ניסיוני)", @@ -262,6 +276,7 @@ "Images": "תמונות", "Import Chats": "יבוא צ'אטים", "Import Documents Mapping": "יבוא מיפוי מסמכים", + "Import Functions": "", "Import Models": "ייבוא דגמים", "Import Prompts": "יבוא פקודות", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "רק תווים אלפאנומריים ומקפים מותרים במחרוזת הפקודה.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "אופס! תחזיק מעמד! הקבצים שלך עדיין בתהליך העיבוד. אנו מבשלים אותם לשלמות. נא להתאזר בסבלנות ונודיע לך ברגע שיהיו מוכנים.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "אופס! נראה שהכתובת URL אינה תקינה. אנא בדוק שוב ונסה שנית.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "אופס! אתה משתמש בשיטה לא נתמכת (רק חזית). אנא שרת את ממשק המשתמש האינטרנטי מהשרת האחורי.", "Open": "פתח", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "מודל דירוג מחדש", "Reranking model disabled": "מודל דירוג מחדש מושבת", "Reranking model set to \"{{reranking_model}}\"": "מודל דירוג מחדש הוגדר ל-\"{{reranking_model}}\"", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "איפוס אחסון וקטורים", "Response AutoCopy to Clipboard": "העתקה אוטומטית של תגובה ללוח", @@ -425,6 +442,7 @@ "Search a model": "חפש מודל", "Search Chats": "חיפוש צ'אטים", "Search Documents": "חפש מסמכים", + "Search Functions": "", "Search Models": "חיפוש מודלים", "Search Prompts": "חפש פקודות", "Search Query Generation Prompt": "", @@ -475,6 +493,7 @@ "short-summary": "סיכום קצר", "Show": "הצג", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "הצג קיצורי דרך", "Showcased creativity": "הצגת יצירתיות", "sidebar": "סרגל צד", @@ -496,6 +515,7 @@ "System": "מערכת", "System Prompt": "תגובת מערכת", "Tags": "תגיות", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "תרשמו יותר:", "Temperature": "טמפרטורה", @@ -507,9 +527,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "ציון צריך להיות ערך בין 0.0 (0%) ל-1.0 (100%)", "Theme": "נושא", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "פעולה זו מבטיחה שהשיחות בעלות הערך שלך יישמרו באופן מאובטח במסד הנתונים העורפי שלך. תודה!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "הגדרה זו אינה מסתנכרנת בין דפדפנים או מכשירים.", + "This will delete": "", "Thorough explanation": "תיאור מפורט", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "טיפ: עדכן חריצים משתנים מרובים ברציפות על-ידי לחיצה על מקש Tab בקלט הצ'אט לאחר כל החלפה.", "Title": "שם", @@ -523,6 +545,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "לקלטת שיחה.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "היום", "Toggle settings": "החלפת מצב של הגדרות", @@ -538,10 +561,13 @@ "Type": "סוג", "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}}', אך מקבל ומתייחס אליו כטקסט רגיל", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "עדכן ושכפל קישור", "Update password": "עדכן סיסמה", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "העלה מודל GGUF", "Upload Files": "העלאת קבצים", "Upload Pipeline": "", @@ -560,6 +586,7 @@ "variable": "משתנה", "variable to have them replaced with clipboard content.": "משתנה להחליפו ב- clipboard תוכן.", "Version": "גרסה", + "Voice": "", "Warning": "אזהרה", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "אזהרה: אם תעדכן או תשנה את מודל ההטבעה שלך, יהיה עליך לייבא מחדש את כל המסמכים.", "Web": "רשת", @@ -569,7 +596,6 @@ "Web Search": "חיפוש באינטרנט", "Web Search Engine": "מנוע חיפוש באינטרנט", "Webhook URL": "URL Webhook", - "WebUI Add-ons": "נסיונות WebUI", "WebUI Settings": "הגדרות WebUI", "WebUI will make requests to": "WebUI יבקש לבקש", "What’s New in": "מה חדש ב", diff --git a/src/lib/i18n/locales/hi-IN/translation.json b/src/lib/i18n/locales/hi-IN/translation.json index f59de60238..af093532d0 100644 --- a/src/lib/i18n/locales/hi-IN/translation.json +++ b/src/lib/i18n/locales/hi-IN/translation.json @@ -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": "एक सहायक", @@ -81,6 +82,7 @@ "Capabilities": "क्षमताओं", "Change Password": "पासवर्ड बदलें", "Chat": "चैट करें", + "Chat Background Image": "", "Chat Bubble UI": "चैट बॉली", "Chat direction": "चैट दिशा", "Chat History": "चैट का इतिहास", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "सहायता के लिए यहां क्लिक करें।", "Click here to": "यहां क्लिक करें", + "Click here to download user import template file.": "", "Click here to select": "चयन करने के लिए यहां क्लिक करें।", "Click here to select a csv file.": "सीएसवी फ़ाइल का चयन करने के लिए यहां क्लिक करें।", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "ComfyUI का बेस यूआरएल आवश्यक है", "Command": "कमांड", "Concurrent Requests": "समवर्ती अनुरोध", + "Confirm": "", "Confirm Password": "पासवर्ड की पुष्टि कीजिये", + "Confirm your action": "", "Connections": "सम्बन्ध", "Contact Admin for WebUI Access": "", "Content": "सामग्री", @@ -130,6 +135,8 @@ "Create new secret key": "नया क्रिप्टोग्राफिक क्षेत्र बनाएं", "Created at": "किस समय बनाया गया", "Created At": "किस समय बनाया गया", + "Created by": "", + "CSV Import": "", "Current Model": "वर्तमान मॉडल", "Current Password": "वर्तमान पासवर्ड", "Custom": "कस्टम संस्करण", @@ -151,6 +158,7 @@ "Delete All Chats": "सभी चैट हटाएं", "Delete chat": "चैट हटाएं", "Delete Chat": "चैट हटाएं", + "Delete chat?": "", "delete this link": "इस लिंक को हटाएं", "Delete User": "उपभोक्ता मिटायें", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} हटा दिया गया", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "चैट निर्यात करें", "Export Documents Mapping": "निर्यात दस्तावेज़ मैपिंग", + "Export Functions": "", "Export Models": "निर्यात मॉडल", "Export Prompts": "प्रॉम्प्ट निर्यात करें", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "फरवरी", "Feel free to add specific details": "विशिष्ट विवरण जोड़ने के लिए स्वतंत्र महसूस करें", + "File": "", "File Mode": "फ़ाइल मोड", "File not found.": "फ़ाइल प्राप्त नहीं हुई।", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "फ़िंगरप्रिंट स्पूफ़िंग का पता चला: प्रारंभिक अक्षरों को अवतार के रूप में उपयोग करने में असमर्थ। प्रोफ़ाइल छवि को डिफ़ॉल्ट पर डिफ़ॉल्ट किया जा रहा है.", "Fluidly stream large external response chunks": "बड़े बाह्य प्रतिक्रिया खंडों को तरल रूप से प्रवाहित करें", "Focus chat input": "चैट इनपुट पर फ़ोकस करें", "Followed instructions perfectly": "निर्देशों का पूर्णतः पालन किया", + "Form": "", "Format your variables using square brackets like this:": "वर्गाकार कोष्ठकों का उपयोग करके अपने चरों को इस प्रकार प्रारूपित करें :", "Frequency Penalty": "फ्रीक्वेंसी पेनल्टी", + "Functions": "", "General": "सामान्य", "General Settings": "सामान्य सेटिंग्स", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "नमस्ते, {{name}}", "Help": "मदद", "Hide": "छुपाएं", + "Hide Model": "", "How can I help you today?": "आज मैं आपकी कैसे मदद कर सकता हूँ?", "Hybrid Search": "हाइब्रिड खोज", "Image Generation (Experimental)": "छवि निर्माण (प्रायोगिक)", @@ -262,6 +276,7 @@ "Images": "इमेजिस", "Import Chats": "चैट आयात करें", "Import Documents Mapping": "दस्तावेज़ मैपिंग आयात करें", + "Import Functions": "", "Import Models": "आयात मॉडल", "Import Prompts": "प्रॉम्प्ट आयात करें", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "कमांड स्ट्रिंग में केवल अल्फ़ान्यूमेरिक वर्ण और हाइफ़न की अनुमति है।", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "उफ़! कृपया प्रतीक्षा करें, आपकी फ़ाइलें अभी भी प्रसंस्करण ओवन में हैं। हम उन्हें पूर्णता से पका रहे हैं। कृपया धैर्य रखें और जब वे तैयार हो जाएंगे तो हम आपको बता देंगे।", "Oops! Looks like the URL is invalid. Please double-check and try again.": "उफ़! ऐसा लगता है कि यूआरएल अमान्य है. कृपया दोबारा जांचें और पुनः प्रयास करें।", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "उफ़! आप एक असमर्थित विधि (केवल फ्रंटएंड) का उपयोग कर रहे हैं। कृपया बैकएंड से WebUI सर्वे करें।", "Open": "खोलें", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "रीरैकिंग मोड", "Reranking model disabled": "पुनर्रैंकिंग मॉडल अक्षम किया गया", "Reranking model set to \"{{reranking_model}}\"": "रीरैंकिंग मॉडल को \"{{reranking_model}}\" पर \u200b\u200bसेट किया गया", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "वेक्टर संग्रहण रीसेट करें", "Response AutoCopy to Clipboard": "क्लिपबोर्ड पर प्रतिक्रिया ऑटोकॉपी", @@ -425,6 +442,7 @@ "Search a model": "एक मॉडल खोजें", "Search Chats": "चैट खोजें", "Search Documents": "दस्तावेज़ खोजें", + "Search Functions": "", "Search Models": "मॉडल खोजें", "Search Prompts": "प्रॉम्प्ट खोजें", "Search Query Generation Prompt": "", @@ -474,6 +492,7 @@ "short-summary": "संक्षिप्त सारांश", "Show": "दिखाओ", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "शॉर्टकट दिखाएँ", "Showcased creativity": "रचनात्मकता का प्रदर्शन किया", "sidebar": "साइड बार", @@ -495,6 +514,7 @@ "System": "सिस्टम", "System Prompt": "सिस्टम प्रॉम्प्ट", "Tags": "टैग", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "हमें और अधिक बताएँ:", "Temperature": "टेंपेरेचर", @@ -506,9 +526,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "स्कोर का मान 0.0 (0%) और 1.0 (100%) के बीच होना चाहिए।", "Theme": "थीम", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "यह सुनिश्चित करता है कि आपकी मूल्यवान बातचीत आपके बैकएंड डेटाबेस में सुरक्षित रूप से सहेजी गई है। धन्यवाद!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "यह सेटिंग सभी ब्राउज़रों या डिवाइसों में समन्वयित नहीं होती है", + "This will delete": "", "Thorough explanation": "विस्तृत व्याख्या", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "टिप: प्रत्येक प्रतिस्थापन के बाद चैट इनपुट में टैब कुंजी दबाकर लगातार कई वैरिएबल स्लॉट अपडेट करें।", "Title": "शीर्षक", @@ -522,6 +544,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "इनपुट चैट करने के लिए.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "आज", "Toggle settings": "सेटिंग्स टॉगल करें", @@ -537,10 +560,13 @@ "Type": "प्रकार", "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}}', लेकिन स्वीकार करना और सादे पाठ के रूप में व्यवहार करना", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "अपडेट करें और लिंक कॉपी करें", "Update password": "पासवर्ड अपडेट करें", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "GGUF मॉडल अपलोड करें", "Upload Files": "फ़ाइलें अपलोड करें", "Upload Pipeline": "", @@ -559,6 +585,7 @@ "variable": "वेरिएबल", "variable to have them replaced with clipboard content.": "उन्हें क्लिपबोर्ड सामग्री से बदलने के लिए वेरिएबल।", "Version": "संस्करण", + "Voice": "", "Warning": "चेतावनी", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "चेतावनी: यदि आप अपने एम्बेडिंग मॉडल को अपडेट या बदलते हैं, तो आपको सभी दस्तावेज़ों को फिर से आयात करने की आवश्यकता होगी।", "Web": "वेब", @@ -568,7 +595,6 @@ "Web Search": "वेब खोज", "Web Search Engine": "वेब खोज इंजन", "Webhook URL": "वेबहुक URL", - "WebUI Add-ons": "वेबयू ऐड-ons", "WebUI Settings": "WebUI सेटिंग्स", "WebUI will make requests to": "WebUI अनुरोध करेगा", "What’s New in": "इसमें नया क्या है", diff --git a/src/lib/i18n/locales/hr-HR/translation.json b/src/lib/i18n/locales/hr-HR/translation.json index 8489ac27e8..53493b0ad6 100644 --- a/src/lib/i18n/locales/hr-HR/translation.json +++ b/src/lib/i18n/locales/hr-HR/translation.json @@ -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", @@ -81,6 +82,7 @@ "Capabilities": "Mogućnosti", "Change Password": "Promijeni lozinku", "Chat": "Razgovor", + "Chat Background Image": "", "Chat Bubble UI": "Razgovor - Bubble UI", "Chat direction": "Razgovor - smijer", "Chat History": "Povijest razgovora", @@ -97,6 +99,7 @@ "Clear memory": "Očisti memoriju", "Click here for help.": "Kliknite ovdje za pomoć.", "Click here to": "Kliknite ovdje za", + "Click here to download user import template file.": "", "Click here to select": "Kliknite ovdje za odabir", "Click here to select a csv file.": "Kliknite ovdje da odaberete csv datoteku.", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "Potreban je ComfyUI osnovni URL.", "Command": "Naredba", "Concurrent Requests": "Istodobni zahtjevi", + "Confirm": "", "Confirm Password": "Potvrdite lozinku", + "Confirm your action": "", "Connections": "Povezivanja", "Contact Admin for WebUI Access": "Kontaktirajte admina za WebUI pristup", "Content": "Sadržaj", @@ -130,6 +135,8 @@ "Create new secret key": "Stvori novi tajni ključ", "Created at": "Stvoreno", "Created At": "Stvoreno", + "Created by": "", + "CSV Import": "", "Current Model": "Trenutni model", "Current Password": "Trenutna lozinka", "Custom": "Prilagođeno", @@ -151,6 +158,7 @@ "Delete All Chats": "Izbriši sve razgovore", "Delete chat": "Izbriši razgovor", "Delete Chat": "Izbriši razgovor", + "Delete chat?": "", "delete this link": "izbriši ovu vezu", "Delete User": "Izbriši korisnika", "Deleted {{deleteModelTag}}": "Izbrisan {{deleteModelTag}}", @@ -224,6 +232,7 @@ "Export chat (.json)": "Izvoz četa (.json)", "Export Chats": "Izvoz razgovora", "Export Documents Mapping": "Izvoz mapiranja dokumenata", + "Export Functions": "", "Export Models": "Izvoz modela", "Export Prompts": "Izvoz prompta", "Export Tools": "Izvoz alata", @@ -233,14 +242,18 @@ "Failed to update settings": "Greška kod ažuriranja postavki", "February": "Veljača", "Feel free to add specific details": "Slobodno dodajte specifične detalje", + "File": "", "File Mode": "Način datoteke", "File not found.": "Datoteka nije pronađena.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Otkriveno krivotvorenje otisaka prstiju: Nemoguće je koristiti inicijale kao avatar. Postavljanje na zadanu profilnu sliku.", "Fluidly stream large external response chunks": "Glavno strujanje velikih vanjskih dijelova odgovora", "Focus chat input": "Fokusiraj unos razgovora", "Followed instructions perfectly": "Savršeno slijedio upute", + "Form": "", "Format your variables using square brackets like this:": "Formatirajte svoje varijable pomoću uglatih zagrada ovako:", "Frequency Penalty": "Kazna za učestalost", + "Functions": "", "General": "Općenito", "General Settings": "Opće postavke", "Generate Image": "Gneriraj sliku", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Bok, {{name}}", "Help": "Pomoć", "Hide": "Sakrij", + "Hide Model": "", "How can I help you today?": "Kako vam mogu pomoći danas?", "Hybrid Search": "Hibridna pretraga", "Image Generation (Experimental)": "Generiranje slika (eksperimentalno)", @@ -262,6 +276,7 @@ "Images": "Slike", "Import Chats": "Uvoz razgovora", "Import Documents Mapping": "Uvoz mapiranja dokumenata", + "Import Functions": "", "Import Models": "Uvoz modela", "Import Prompts": "Uvoz prompta", "Import Tools": "Uvoz alata", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Samo alfanumerički znakovi i crtice su dopušteni u naredbenom nizu.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Ups! Držite se! Vaše datoteke su još uvijek u procesu obrade. Pečemo ih do savršenstva. Molimo vas da budete strpljivi i obavijestit ćemo vas kada budu spremne.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ups! Izgleda da je URL nevažeći. Molimo provjerite ponovno i pokušajte ponovo.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ups! Koristite nepodržanu metodu (samo frontend). Molimo poslužite WebUI s backend-a.", "Open": "Otvoreno", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "Model za ponovno rangiranje", "Reranking model disabled": "Model za ponovno rangiranje onemogućen", "Reranking model set to \"{{reranking_model}}\"": "Model za ponovno rangiranje postavljen na \"{{reranking_model}}\"", + "Reset": "", "Reset Upload Directory": "Poništi upload direktorij", "Reset Vector Storage": "Resetiraj pohranu vektora", "Response AutoCopy to Clipboard": "Automatsko kopiranje odgovora u međuspremnik", @@ -425,6 +442,7 @@ "Search a model": "Pretraži model", "Search Chats": "Pretraži razgovore", "Search Documents": "Pretraga dokumenata", + "Search Functions": "", "Search Models": "Pretražite modele", "Search Prompts": "Pretraga prompta", "Search Query Generation Prompt": "Upit za generiranje upita za pretraživanje", @@ -475,6 +493,7 @@ "short-summary": "kratki sažetak", "Show": "Pokaži", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Pokaži prečace", "Showcased creativity": "Prikazana kreativnost", "sidebar": "bočna traka", @@ -496,6 +515,7 @@ "System": "Sustav", "System Prompt": "Sistemski prompt", "Tags": "Oznake", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "Recite nam više:", "Temperature": "Temperatura", @@ -507,9 +527,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Ocjena treba biti vrijednost između 0,0 (0%) i 1,0 (100%).", "Theme": "Tema", "Thinking...": "Razmišljam", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Ovo osigurava da su vaši vrijedni razgovori sigurno spremljeni u bazu podataka. Hvala vam!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "Ovo je eksperimentalna značajka, možda neće funkcionirati prema očekivanjima i podložna je promjenama u bilo kojem trenutku.", "This setting does not sync across browsers or devices.": "Ova postavka se ne sinkronizira između preglednika ili uređaja.", + "This will delete": "", "Thorough explanation": "Detaljno objašnjenje", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Savjet: Ažurirajte više mjesta za varijable uzastopno pritiskom na tipku tab u unosu razgovora nakon svake zamjene.", "Title": "Naslov", @@ -523,6 +545,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Za pristup WebUI-u obratite se administratoru. Administratori mogu upravljati statusima korisnika s Admin panela.", "To add documents here, upload them to the \"Documents\" workspace first.": "Da biste ovdje dodali dokumente, prvo ih prenesite u radni prostor \"Dokumenti\".", "to chat input.": "u unos razgovora.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Danas", "Toggle settings": "Prebaci postavke", @@ -538,10 +561,13 @@ "Type": "Tip", "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", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Ažuriraj i kopiraj vezu", "Update password": "Ažuriraj lozinku", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "Učitaj GGUF model", "Upload Files": "Prijenos datoteka", "Upload Pipeline": "Prijenos kanala", @@ -560,6 +586,7 @@ "variable": "varijabla", "variable to have them replaced with clipboard content.": "varijabla za zamjenu sadržajem međuspremnika.", "Version": "Verzija", + "Voice": "", "Warning": "Upozorenje", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Upozorenje: Ako ažurirate ili promijenite svoj model za umetanje, morat ćete ponovno uvesti sve dokumente.", "Web": "Web", @@ -569,7 +596,6 @@ "Web Search": "Internet pretraga", "Web Search Engine": "Web tražilica", "Webhook URL": "URL webkuke", - "WebUI Add-ons": "Dodaci za WebUI", "WebUI Settings": "WebUI postavke", "WebUI will make requests to": "WebUI će slati zahtjeve na", "What’s New in": "Što je novo u", diff --git a/src/lib/i18n/locales/it-IT/translation.json b/src/lib/i18n/locales/it-IT/translation.json index 50d462e2a0..210a4a0e88 100644 --- a/src/lib/i18n/locales/it-IT/translation.json +++ b/src/lib/i18n/locales/it-IT/translation.json @@ -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", @@ -81,6 +82,7 @@ "Capabilities": "Funzionalità", "Change Password": "Cambia password", "Chat": "Chat", + "Chat Background Image": "", "Chat Bubble UI": "UI bolle chat", "Chat direction": "Direzione chat", "Chat History": "Cronologia chat", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "Clicca qui per aiuto.", "Click here to": "Clicca qui per", + "Click here to download user import template file.": "", "Click here to select": "Clicca qui per selezionare", "Click here to select a csv file.": "Clicca qui per selezionare un file csv.", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "L'URL base ComfyUI è obbligatorio.", "Command": "Comando", "Concurrent Requests": "Richieste simultanee", + "Confirm": "", "Confirm Password": "Conferma password", + "Confirm your action": "", "Connections": "Connessioni", "Contact Admin for WebUI Access": "", "Content": "Contenuto", @@ -130,6 +135,8 @@ "Create new secret key": "Crea nuova chiave segreta", "Created at": "Creato il", "Created At": "Creato il", + "Created by": "", + "CSV Import": "", "Current Model": "Modello corrente", "Current Password": "Password corrente", "Custom": "Personalizzato", @@ -151,6 +158,7 @@ "Delete All Chats": "Elimina tutte le chat", "Delete chat": "Elimina chat", "Delete Chat": "Elimina chat", + "Delete chat?": "", "delete this link": "elimina questo link", "Delete User": "Elimina utente", "Deleted {{deleteModelTag}}": "Eliminato {{deleteModelTag}}", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "Esporta chat", "Export Documents Mapping": "Esporta mappatura documenti", + "Export Functions": "", "Export Models": "Esporta modelli", "Export Prompts": "Esporta prompt", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "Febbraio", "Feel free to add specific details": "Sentiti libero/a di aggiungere dettagli specifici", + "File": "", "File Mode": "Modalità file", "File not found.": "File non trovato.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Rilevato spoofing delle impronte digitali: impossibile utilizzare le iniziali come avatar. Ripristino all'immagine del profilo predefinita.", "Fluidly stream large external response chunks": "Trasmetti in modo fluido blocchi di risposta esterni di grandi dimensioni", "Focus chat input": "Metti a fuoco l'input della chat", "Followed instructions perfectly": "Ha seguito le istruzioni alla perfezione", + "Form": "", "Format your variables using square brackets like this:": "Formatta le tue variabili usando parentesi quadre come questa:", "Frequency Penalty": "Penalità di frequenza", + "Functions": "", "General": "Generale", "General Settings": "Impostazioni generali", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Ciao, {{name}}", "Help": "Aiuto", "Hide": "Nascondi", + "Hide Model": "", "How can I help you today?": "Come posso aiutarti oggi?", "Hybrid Search": "Ricerca ibrida", "Image Generation (Experimental)": "Generazione di immagini (sperimentale)", @@ -262,6 +276,7 @@ "Images": "Immagini", "Import Chats": "Importa chat", "Import Documents Mapping": "Importa mappatura documenti", + "Import Functions": "", "Import Models": "Importazione di modelli", "Import Prompts": "Importa prompt", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Nella stringa di comando sono consentiti solo caratteri alfanumerici e trattini.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Ops! Aspetta! I tuoi file sono ancora in fase di elaborazione. Li stiamo cucinando alla perfezione. Per favore sii paziente e ti faremo sapere quando saranno pronti.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ops! Sembra che l'URL non sia valido. Si prega di ricontrollare e riprovare.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ops! Stai utilizzando un metodo non supportato (solo frontend). Si prega di servire la WebUI dal backend.", "Open": "Apri", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "Modello di riclassificazione", "Reranking model disabled": "Modello di riclassificazione disabilitato", "Reranking model set to \"{{reranking_model}}\"": "Modello di riclassificazione impostato su \"{{reranking_model}}\"", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "Reimposta archivio vettoriale", "Response AutoCopy to Clipboard": "Copia automatica della risposta negli appunti", @@ -425,6 +442,7 @@ "Search a model": "Cerca un modello", "Search Chats": "Cerca nelle chat", "Search Documents": "Cerca documenti", + "Search Functions": "", "Search Models": "Cerca modelli", "Search Prompts": "Cerca prompt", "Search Query Generation Prompt": "", @@ -475,6 +493,7 @@ "short-summary": "riassunto-breve", "Show": "Mostra", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Mostra", "Showcased creativity": "Creatività messa in mostra", "sidebar": "barra laterale", @@ -496,6 +515,7 @@ "System": "Sistema", "System Prompt": "Prompt di sistema", "Tags": "Tag", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "Raccontaci di più:", "Temperature": "Temperatura", @@ -507,9 +527,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Il punteggio dovrebbe essere un valore compreso tra 0.0 (0%) e 1.0 (100%).", "Theme": "Tema", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Ciò garantisce che le tue preziose conversazioni siano salvate in modo sicuro nel tuo database backend. Grazie!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "Questa impostazione non si sincronizza tra browser o dispositivi.", + "This will delete": "", "Thorough explanation": "Spiegazione dettagliata", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Suggerimento: aggiorna più slot di variabili consecutivamente premendo il tasto tab nell'input della chat dopo ogni sostituzione.", "Title": "Titolo", @@ -523,6 +545,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "all'input della chat.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Oggi", "Toggle settings": "Attiva/disattiva impostazioni", @@ -538,10 +561,13 @@ "Type": "Digitare", "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", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Aggiorna e copia link", "Update password": "Aggiorna password", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "Carica un modello GGUF", "Upload Files": "Carica file", "Upload Pipeline": "", @@ -560,6 +586,7 @@ "variable": "variabile", "variable to have them replaced with clipboard content.": "variabile per farli sostituire con il contenuto degli appunti.", "Version": "Versione", + "Voice": "", "Warning": "Avvertimento", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Attenzione: se aggiorni o cambi il tuo modello di embedding, dovrai reimportare tutti i documenti.", "Web": "Web", @@ -569,7 +596,6 @@ "Web Search": "Ricerca sul Web", "Web Search Engine": "Motore di ricerca Web", "Webhook URL": "URL webhook", - "WebUI Add-ons": "Componenti aggiuntivi WebUI", "WebUI Settings": "Impostazioni WebUI", "WebUI will make requests to": "WebUI effettuerà richieste a", "What’s New in": "Novità in", diff --git a/src/lib/i18n/locales/ja-JP/translation.json b/src/lib/i18n/locales/ja-JP/translation.json index 589753b890..1f85c21a30 100644 --- a/src/lib/i18n/locales/ja-JP/translation.json +++ b/src/lib/i18n/locales/ja-JP/translation.json @@ -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": "アシスタント", @@ -81,6 +82,7 @@ "Capabilities": "資格", "Change Password": "パスワードを変更", "Chat": "チャット", + "Chat Background Image": "", "Chat Bubble UI": "チャットバブルUI", "Chat direction": "チャットの方向", "Chat History": "チャット履歴", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "ヘルプについてはここをクリックしてください。", "Click here to": "ここをクリックして", + "Click here to download user import template file.": "", "Click here to select": "選択するにはここをクリックしてください", "Click here to select a csv file.": "CSVファイルを選択するにはここをクリックしてください。", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "ComfyUIベースURLが必要です。", "Command": "コマンド", "Concurrent Requests": "コンカレント要求", + "Confirm": "", "Confirm Password": "パスワードを確認", + "Confirm your action": "", "Connections": "接続", "Contact Admin for WebUI Access": "", "Content": "コンテンツ", @@ -130,6 +135,8 @@ "Create new secret key": "新しいシークレットキーを作成", "Created at": "作成日時", "Created At": "作成日時", + "Created by": "", + "CSV Import": "", "Current Model": "現在のモデル", "Current Password": "現在のパスワード", "Custom": "カスタム", @@ -151,6 +158,7 @@ "Delete All Chats": "すべてのチャットを削除", "Delete chat": "チャットを削除", "Delete Chat": "チャットを削除", + "Delete chat?": "", "delete this link": "このリンクを削除します", "Delete User": "ユーザーを削除", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} を削除しました", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "チャットをエクスポート", "Export Documents Mapping": "ドキュメントマッピングをエクスポート", + "Export Functions": "", "Export Models": "モデルのエクスポート", "Export Prompts": "プロンプトをエクスポート", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "2月", "Feel free to add specific details": "詳細を追加してください", + "File": "", "File Mode": "ファイルモード", "File not found.": "ファイルが見つかりません。", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "指紋のなりすましが検出されました: イニシャルをアバターとして使用できません。デフォルトのプロファイル画像にデフォルト設定されています。", "Fluidly stream large external response chunks": "大規模な外部応答チャンクを流動的にストリーミングする", "Focus chat input": "チャット入力をフォーカス", "Followed instructions perfectly": "完全に指示に従った", + "Form": "", "Format your variables using square brackets like this:": "次のように角括弧を使用して変数をフォーマットします。", "Frequency Penalty": "周波数ペナルティ", + "Functions": "", "General": "一般", "General Settings": "一般設定", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "こんにちは、{{name}} さん", "Help": "ヘルプ", "Hide": "非表示", + "Hide Model": "", "How can I help you today?": "今日はどのようにお手伝いしましょうか?", "Hybrid Search": "ブリッジ検索", "Image Generation (Experimental)": "画像生成 (実験的)", @@ -262,6 +276,7 @@ "Images": "画像", "Import Chats": "チャットをインポート", "Import Documents Mapping": "ドキュメントマッピングをインポート", + "Import Functions": "", "Import Models": "モデルのインポート", "Import Prompts": "プロンプトをインポート", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "コマンド文字列には英数字とハイフンのみが許可されています。", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "おっと! しばらくお待ちください! ファイルはまだ処理中です。完璧に仕上げていますので、しばらくお待ちください。準備ができたらお知らせします。", "Oops! Looks like the URL is invalid. Please double-check and try again.": "おっと! URL が無効なようです。もう一度確認してやり直してください。", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "おっと! サポートされていない方法 (フロントエンドのみ) を使用しています。バックエンドから WebUI を提供してください。", "Open": "開く", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "モデルの再ランキング", "Reranking model disabled": "再ランキングモデルが無効です", "Reranking model set to \"{{reranking_model}}\"": "再ランキングモデルを \"{{reranking_model}}\" に設定しました", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "ベクトルストレージをリセット", "Response AutoCopy to Clipboard": "クリップボードへの応答の自動コピー", @@ -425,6 +442,7 @@ "Search a model": "モデルを検索", "Search Chats": "チャットの検索", "Search Documents": "ドキュメントを検索", + "Search Functions": "", "Search Models": "モデル検索", "Search Prompts": "プロンプトを検索", "Search Query Generation Prompt": "", @@ -473,6 +491,7 @@ "short-summary": "short-summary", "Show": "表示", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "表示", "Showcased creativity": "創造性を披露", "sidebar": "サイドバー", @@ -494,6 +513,7 @@ "System": "システム", "System Prompt": "システムプロンプト", "Tags": "タグ", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "もっと話してください:", "Temperature": "温度", @@ -505,9 +525,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "スコアは0.0(0%)から1.0(100%)の間の値にしてください。", "Theme": "テーマ", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "これは、貴重な会話がバックエンドデータベースに安全に保存されることを保証します。ありがとうございます!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "この設定は、ブラウザやデバイス間で同期されません。", + "This will delete": "", "Thorough explanation": "詳細な説明", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "ヒント: 各置換後にチャット入力で Tab キーを押すことで、複数の変数スロットを連続して更新できます。", "Title": "タイトル", @@ -521,6 +543,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "チャット入力へ。", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "今日", "Toggle settings": "設定を切り替え", @@ -536,10 +559,13 @@ "Type": "種類", "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}}' ですが、プレーンテキストとして受け入れて処理します", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "リンクの更新とコピー", "Update password": "パスワードを更新", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "GGUF モデルをアップロード", "Upload Files": "ファイルのアップロード", "Upload Pipeline": "", @@ -558,6 +584,7 @@ "variable": "変数", "variable to have them replaced with clipboard content.": "クリップボードの内容に置き換える変数。", "Version": "バージョン", + "Voice": "", "Warning": "警告", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "警告: 埋め込みモデルを更新または変更した場合は、すべてのドキュメントを再インポートする必要があります。", "Web": "ウェブ", @@ -567,7 +594,6 @@ "Web Search": "ウェブ検索", "Web Search Engine": "ウェブ検索エンジン", "Webhook URL": "Webhook URL", - "WebUI Add-ons": "WebUI アドオン", "WebUI Settings": "WebUI 設定", "WebUI will make requests to": "WebUI は次に対してリクエストを行います", "What’s New in": "新機能", diff --git a/src/lib/i18n/locales/ka-GE/translation.json b/src/lib/i18n/locales/ka-GE/translation.json index e0c3494745..a4a91f085c 100644 --- a/src/lib/i18n/locales/ka-GE/translation.json +++ b/src/lib/i18n/locales/ka-GE/translation.json @@ -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": "ასისტენტი", @@ -81,6 +82,7 @@ "Capabilities": "შესაძლებლობები", "Change Password": "პაროლის შეცვლა", "Chat": "მიმოწერა", + "Chat Background Image": "", "Chat Bubble UI": "ჩატის ბულბი", "Chat direction": "ჩატის მიმართულება", "Chat History": "მიმოწერის ისტორია", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "დახმარებისთვის, დააკლიკე აქ", "Click here to": "დააკლიკე აქ", + "Click here to download user import template file.": "", "Click here to select": "ასარჩევად, დააკლიკე აქ", "Click here to select a csv file.": "ასარჩევად, დააკლიკე აქ", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "ComfyUI საბაზისო URL აუცილებელია.", "Command": "ბრძანება", "Concurrent Requests": "თანმხლები მოთხოვნები", + "Confirm": "", "Confirm Password": "პაროლის დამოწმება", + "Confirm your action": "", "Connections": "კავშირები", "Contact Admin for WebUI Access": "", "Content": "კონტენტი", @@ -130,6 +135,8 @@ "Create new secret key": "პირადი ღირებულბრის შექმნა", "Created at": "შექმნილია", "Created At": "შექმნილია", + "Created by": "", + "CSV Import": "", "Current Model": "მიმდინარე მოდელი", "Current Password": "მიმდინარე პაროლი", "Custom": "საკუთარი", @@ -151,6 +158,7 @@ "Delete All Chats": "ყველა ჩატის წაშლა", "Delete chat": "შეტყობინების წაშლა", "Delete Chat": "შეტყობინების წაშლა", + "Delete chat?": "", "delete this link": "ბმულის წაშლა", "Delete User": "მომხმარებლის წაშლა", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} წაშლილია", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "მიმოწერის ექსპორტირება", "Export Documents Mapping": "დოკუმენტების კავშირის ექსპორტი", + "Export Functions": "", "Export Models": "ექსპორტის მოდელები", "Export Prompts": "მოთხოვნების ექსპორტი", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "თებერვალი", "Feel free to add specific details": "უფასოდ დაამატეთ დეტალები", + "File": "", "File Mode": "ფაილური რეჟიმი", "File not found.": "ფაილი ვერ მოიძებნა", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "აღმოჩენილია თითის ანაბეჭდის გაყალბება: ინიციალების გამოყენება ავატარად შეუძლებელია. დეფოლტ პროფილის დეფოლტ სურათი.", "Fluidly stream large external response chunks": "თხევადი ნაკადი დიდი გარე საპასუხო ნაწილაკების", "Focus chat input": "ჩეთის შეყვანის ფოკუსი", "Followed instructions perfectly": "ყველა ინსტრუქცია უზრუნველყოფა", + "Form": "", "Format your variables using square brackets like this:": "დააფორმატეთ თქვენი ცვლადები კვადრატული ფრჩხილების გამოყენებით:", "Frequency Penalty": "სიხშირის ჯარიმა", + "Functions": "", "General": "ზოგადი", "General Settings": "ზოგადი პარამეტრები", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "გამარჯობა, {{name}}", "Help": "დახმარება", "Hide": "დამალვა", + "Hide Model": "", "How can I help you today?": "როგორ შემიძლია დაგეხმარო დღეს?", "Hybrid Search": "ჰიბრიდური ძებნა", "Image Generation (Experimental)": "სურათების გენერაცია (ექსპერიმენტული)", @@ -262,6 +276,7 @@ "Images": "სურათები", "Import Chats": "მიმოწერების იმპორტი", "Import Documents Mapping": "დოკუმენტების კავშირის იმპორტი", + "Import Functions": "", "Import Models": "იმპორტის მოდელები", "Import Prompts": "მოთხოვნების იმპორტი", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "ბრძანების სტრიქონში დაშვებულია მხოლოდ ალფანუმერული სიმბოლოები და დეფისები.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "უპს! გამაგრდი! თქვენი ფაილები ჯერ კიდევ დამუშავების ღუმელშია. ჩვენ მათ სრულყოფილებამდე ვამზადებთ. გთხოვთ მოითმინოთ და ჩვენ შეგატყობინებთ, როგორც კი ისინი მზად იქნებიან.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "უი! როგორც ჩანს, მისამართი არასწორია. გთხოვთ, გადაამოწმოთ და ისევ სცადოთ.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "უპს! თქვენ იყენებთ მხარდაუჭერელ მეთოდს (მხოლოდ frontend). გთხოვთ, მოემსახუროთ WebUI-ს ბექენდიდან", "Open": "ღია", "Open AI": "ღია AI", @@ -406,6 +422,7 @@ "Reranking Model": "რექვექტირება", "Reranking model disabled": "რექვექტირება არაა ჩართული", "Reranking model set to \"{{reranking_model}}\"": "Reranking model set to \"{{reranking_model}}\"", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "ვექტორული მეხსიერების გადატვირთვა", "Response AutoCopy to Clipboard": "პასუხის ავტომატური კოპირება ბუფერში", @@ -425,6 +442,7 @@ "Search a model": "მოდელის ძიება", "Search Chats": "ჩატების ძებნა", "Search Documents": "დოკუმენტების ძიება", + "Search Functions": "", "Search Models": "საძიებო მოდელები", "Search Prompts": "მოთხოვნების ძიება", "Search Query Generation Prompt": "", @@ -474,6 +492,7 @@ "short-summary": "მოკლე შინაარსი", "Show": "ჩვენება", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "მალსახმობების ჩვენება", "Showcased creativity": "ჩვენებული ქონება", "sidebar": "საიდბარი", @@ -495,6 +514,7 @@ "System": "სისტემა", "System Prompt": "სისტემური მოთხოვნა", "Tags": "ტეგები", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "ჩვენთან დავუკავშირდით", "Temperature": "ტემპერატურა", @@ -506,9 +526,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "ქულა 0.0 (0%) და 1.0 (100%) ჩაშენებული უნდა იყოს.", "Theme": "თემა", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "ეს უზრუნველყოფს, რომ თქვენი ძვირფასი საუბრები უსაფრთხოდ შეინახება თქვენს backend მონაცემთა ბაზაში. Გმადლობთ!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "ეს პარამეტრი არ სინქრონიზდება ბრაუზერებსა და მოწყობილობებში", + "This will delete": "", "Thorough explanation": "ვრცლად აღწერა", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "რჩევა: განაახლეთ რამდენიმე ცვლადი სლოტი თანმიმდევრულად, ყოველი ჩანაცვლების შემდეგ ჩატის ღილაკზე დაჭერით.", "Title": "სათაური", @@ -522,6 +544,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "ჩატში", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "დღეს", "Toggle settings": "პარამეტრების გადართვა", @@ -537,10 +560,13 @@ "Type": "ტიპი", "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}}“, მაგრამ მიიღება და განიხილება როგორც მარტივი ტექსტი", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "განახლება და ბმულის კოპირება", "Update password": "პაროლის განახლება", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "GGUF მოდელის ატვირთვა", "Upload Files": "ატვირთეთ ფაილები", "Upload Pipeline": "", @@ -559,6 +585,7 @@ "variable": "ცვლადი", "variable to have them replaced with clipboard content.": "ცვლადი, რომ შეცვალოს ისინი ბუფერში შიგთავსით.", "Version": "ვერსია", + "Voice": "", "Warning": "გაფრთხილება", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "გაფრთხილება: თუ განაახლებთ ან შეცვლით ჩანერგვის მოდელს, მოგიწევთ ყველა დოკუმენტის ხელახლა იმპორტი.", "Web": "ვები", @@ -568,7 +595,6 @@ "Web Search": "ვებ ძებნა", "Web Search Engine": "ვებ საძიებო სისტემა", "Webhook URL": "Webhook URL", - "WebUI Add-ons": "WebUI დანამატები", "WebUI Settings": "WebUI პარამეტრები", "WebUI will make requests to": "WebUI გამოგიგზავნით მოთხოვნებს", "What’s New in": "რა არის ახალი", diff --git a/src/lib/i18n/locales/ko-KR/translation.json b/src/lib/i18n/locales/ko-KR/translation.json index 4fcbf09d0c..57eb265731 100644 --- a/src/lib/i18n/locales/ko-KR/translation.json +++ b/src/lib/i18n/locales/ko-KR/translation.json @@ -1,24 +1,24 @@ { - "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "'s', 'm', 'h', 'd', 'w' 또는 만료 없음 '-1'", + "'s', 'm', 'h', 'd', 'w' or '-1' for no expiration.": "만료 없음은 '-1', 아니면 's', 'm', 'h', 'd', 'w' 중 하나를 사용하세요.", "(Beta)": "(Beta)", "(e.g. `sh webui.sh --api`)": "(예: `sh webui.sh --api`)", "(latest)": "(latest)", - "{{ models }}": "{{ 모델 }}", + "{{ models }}": "{{ models }}", "{{ owner }}: You cannot delete a base model": "{{ owner }}: 기본 모델은 삭제할 수 없습니다.", - "{{modelName}} is thinking...": "{{modelName}} 이(가) 생각중입니다....", + "{{modelName}} is thinking...": "{{modelName}} 모델이 생각 중입니다....", "{{user}}'s Chats": "{{user}}의 채팅", "{{webUIName}} Backend Required": "{{webUIName}} 백엔드가 필요합니다.", - "A task model is used when performing tasks such as generating titles for chats and web search queries": "작업 모델은 채팅 및 웹 검색 쿼리에 대한 제목 생성과 같은 작업을 수행할 때 사용됩니다", + "A task model is used when performing tasks such as generating titles for chats and web search queries": "작업 모델은 채팅 및 웹 검색 쿼리에 대한 제목 생성 등의 작업 수행 시 사용됩니다.", "a user": "사용자", - "About": "소개", + "About": "정보", "Account": "계정", - "Account Activation Pending": "", + "Account Activation Pending": "계정 활성화 보류", "Accurate information": "정확한 정보", - "Active Users": "", + "Active Users": "활성 사용자", "Add": "추가", "Add a model id": "모델 ID 추가", - "Add a short description about what this model does": "이 모델의 기능에 대한 간단한 설명을 추가합니다", - "Add a short title for this prompt": "이 프롬프트에 대한 간단한 제목 추가", + "Add a short description about what this model does": "모델의 기능에 대한 간단한 설명 추가", + "Add a short title for this prompt": "프롬프트에 대한 간단한 제목 추가", "Add a tag": "태그 추가", "Add custom prompt": "프롬프트 추가", "Add Docs": "문서 추가", @@ -26,94 +26,99 @@ "Add Memory": "메모리 추가", "Add message": "메시지 추가", "Add Model": "모델 추가", - "Add Tags": "태그들 추가", + "Add Tags": "태그 추가", "Add User": "사용자 추가", "Adjusting these settings will apply changes universally to all users.": "이 설정을 조정하면 모든 사용자에게 적용됩니다.", "admin": "관리자", - "Admin": "", + "Admin": "관리자", "Admin Panel": "관리자 패널", "Admin Settings": "관리자 설정", - "Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "", - "Advanced Parameters": "고급 매개변수", - "Advanced Params": "고급 매개 변수", + "Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "관리자는 항상 모든 도구에 접근할 수 있지만, 사용자는 워크스페이스에서 모델마다 도구를 할당받아야 합니다.", + "Advanced Parameters": "고급 파라미터", + "Advanced Params": "고급 파라미터", "all": "모두", "All Documents": "모든 문서", "All Users": "모든 사용자", "Allow": "허용", "Allow Chat Deletion": "채팅 삭제 허용", - "Allow non-local voices": "", - "alphanumeric characters and hyphens": "영문자,숫자 및 하이픈", + "Allow non-local voices": "외부 음성 허용", + "Allow User Location": "사용자 위치 활용 허용", + "alphanumeric characters and hyphens": "영문자, 숫자, 하이픈", "Already have an account?": "이미 계정이 있으신가요?", "an assistant": "어시스턴트", "and": "그리고", "and create a new shared link.": "새로운 공유 링크를 생성합니다.", "API Base URL": "API 기본 URL", - "API Key": "API키", + "API Key": "API 키", "API Key created.": "API 키가 생성되었습니다.", "API keys": "API 키", "April": "4월", "Archive": "아카이브", - "Archive All Chats": "모든 채팅 보관", - "Archived Chats": "채팅 기록 아카이브", - "are allowed - Activate this command by typing": "허용됩니다 - 이 명령을 활성화하려면 입력하세요.", + "Archive All Chats": "모든 채팅 아카이브", + "Archived Chats": "아카이브된 채팅", + "are allowed - Activate this command by typing": "허용됩니다. - 이 명령을 활성화하려면 입력하세요.", "Are you sure?": "확실합니까?", "Attach file": "파일 첨부", - "Attention to detail": "상세한 주의", + "Attention to detail": "세부 사항에 대한 주의", "Audio": "오디오", "August": "8월", "Auto-playback response": "응답 자동 재생", - "AUTOMATIC1111 Base URL": "AUTOMATIC1111 Base URL", - "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 Base URL이 필요합니다.", + "AUTOMATIC1111 Base URL": "AUTOMATIC1111 기본 URL", + "AUTOMATIC1111 Base URL is required.": "AUTOMATIC1111 기본 URL 설정이 필요합니다.", "available!": "사용 가능!", "Back": "뒤로가기", - "Bad Response": "응답이 좋지 않습니다.", + "Bad Response": "잘못된 응답", "Banners": "배너", "Base Model (From)": "기본 모델(시작)", - "Batch Size (num_batch)": "", + "Batch Size (num_batch)": "배치 크기 (num_batch)", "before": "이전", "Being lazy": "게으름 피우기", "Brave Search API Key": "Brave Search API 키", - "Bypass SSL verification for Websites": "SSL 검증을 무시하려면 웹 사이트를 선택하세요.", - "Call": "", - "Call feature is not supported when using Web STT engine": "", - "Camera": "", + "Bypass SSL verification for Websites": "웹 사이트에 대한 SSL 검증 무시: ", + "Call": "콜", + "Call feature is not supported when using Web STT engine": "웹 STT 엔진 사용 시, 콜 기능은 지원되지 않습니다.", + "Camera": "카메라", "Cancel": "취소", "Capabilities": "기능", "Change Password": "비밀번호 변경", "Chat": "채팅", - "Chat Bubble UI": "채팅 버블 UI", + "Chat Background Image": "채팅 배경 이미지", + "Chat Bubble UI": "버블형 채팅 UI", "Chat direction": "채팅 방향", "Chat History": "채팅 기록", - "Chat History is off for this browser.": "이 브라우저에서 채팅 기록이 꺼져 있습니다.", + "Chat History is off for this browser.": "브라우저에서 채팅 기록이 꺼져 있습니다.", "Chats": "채팅", "Check Again": "다시 확인", "Check for updates": "업데이트 확인", "Checking for updates...": "업데이트 확인중...", "Choose a model before saving...": "저장하기 전에 모델을 선택하세요...", - "Chunk Overlap": "Chunk Overlap", - "Chunk Params": "Chunk Params", - "Chunk Size": "Chunk Size", + "Chunk Overlap": "Chunk 오버랩", + "Chunk Params": "Chunk 파라미터", + "Chunk Size": "Chunk 크기", "Citation": "인용", - "Clear memory": "", + "Clear memory": "메모리 초기화", "Click here for help.": "도움말을 보려면 여기를 클릭하세요.", "Click here to": "여기를 클릭하면", + "Click here to download user import template file.": "", "Click here to select": "선택하려면 여기를 클릭하세요.", "Click here to select a csv file.": "csv 파일을 선택하려면 여기를 클릭하세요.", - "Click here to select a py file.": "", + "Click here to select a py file.": "py 파일을 선택하려면 여기를 클릭하세요.", "Click here to select documents.": "문서를 선택하려면 여기를 클릭하세요.", "click here.": "여기를 클릭하세요.", "Click on the user role button to change a user's role.": "사용자 역할 버튼을 클릭하여 사용자의 역할을 변경하세요.", - "Clone": "클론", + "Clone": "복제", "Close": "닫기", "Collection": "컬렉션", "ComfyUI": "ComfyUI", "ComfyUI Base URL": "ComfyUI 기본 URL", "ComfyUI Base URL is required.": "ComfyUI 기본 URL이 필요합니다.", "Command": "명령", - "Concurrent Requests": "동시 요청", + "Concurrent Requests": "동시 요청 수", + "Confirm": "확인", "Confirm Password": "비밀번호 확인", + "Confirm your action": "액션 확인", "Connections": "연결", - "Contact Admin for WebUI Access": "", + "Contact Admin for WebUI Access": "WebUI 접속을 위해서는 관리자에게 연락 필요", "Content": "내용", "Context Length": "내용 길이", "Continue Response": "대화 계속", @@ -130,12 +135,14 @@ "Create new secret key": "새 비밀 키 만들기", "Created at": "생성일", "Created At": "생성일", + "Created by": "", + "CSV Import": "", "Current Model": "현재 모델", "Current Password": "현재 비밀번호", "Custom": "사용자 정의", "Customize models for a specific purpose": "특정 목적을 위한 모델 사용자 지정", - "Dark": "어두운", - "Dashboard": "", + "Dark": "Dark", + "Dashboard": "대시보드", "Database": "데이터베이스", "December": "12월", "Default": "기본값", @@ -151,6 +158,7 @@ "Delete All Chats": "모든 채팅 삭제", "Delete chat": "채팅 삭제", "Delete Chat": "채팅 삭제", + "Delete chat?": "채팅을 삭제하겠습니까?", "delete this link": "이 링크를 삭제합니다.", "Delete User": "사용자 삭제", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} 삭제됨", @@ -161,38 +169,38 @@ "Discover a prompt": "프롬프트 검색", "Discover, download, and explore custom prompts": "사용자 정의 프롬프트 검색, 다운로드 및 탐색", "Discover, download, and explore model presets": "모델 사전 설정 검색, 다운로드 및 탐색", - "Dismissible": "", - "Display Emoji in Call": "", - "Display the username instead of You in the Chat": "채팅에서 'You' 대신 사용자 이름 표시", + "Dismissible": "제외가능", + "Display Emoji in Call": "콜(call)에서 이모지 표시", + "Display the username instead of You in the Chat": "채팅에서 '당신' 대신 사용자 이름 표시", "Document": "문서", "Document Settings": "문서 설정", - "Documentation": "", - "Documents": "문서들", + "Documentation": "문서 조사", + "Documents": "문서", "does not make any external connections, and your data stays securely on your locally hosted server.": "어떠한 외부 연결도 하지 않으며, 데이터는 로컬에서 호스팅되는 서버에 안전하게 유지됩니다.", "Don't Allow": "허용 안 함", "Don't have an account?": "계정이 없으신가요?", "Don't like the style": "스타일을 좋아하지 않으세요?", - "Download": "다운로드 취소", - "Download canceled": "다운로드 취소됨", + "Download": "다운로드", + "Download canceled": "다운로드 취소", "Download Database": "데이터베이스 다운로드", "Drop any files here to add to the conversation": "대화에 추가할 파일을 여기에 드롭하세요.", "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "예: '30s','10m'. 유효한 시간 단위는 's', 'm', 'h'입니다.", "Edit": "편집", "Edit Doc": "문서 편집", - "Edit Memory": "", + "Edit Memory": "메모리 편집", "Edit User": "사용자 편집", "Email": "이메일", - "Embedding Batch Size": "", + "Embedding Batch Size": "임베딩 배치 크기", "Embedding Model": "임베딩 모델", "Embedding Model Engine": "임베딩 모델 엔진", - "Embedding model set to \"{{embedding_model}}\"": "임베딩 모델을 \"{{embedding_model}}\"로 설정됨", + "Embedding model set to \"{{embedding_model}}\"": "임베딩 모델을 \"{{embedding_model}}\"로 설정함", "Enable Chat History": "채팅 기록 활성화", - "Enable Community Sharing": "커뮤니티 공유 사용", + "Enable Community Sharing": "커뮤니티 공유 활성화", "Enable New Sign Ups": "새 회원가입 활성화", - "Enable Web Search": "Web Search 사용", + "Enable Web Search": "웹 검색 활성화", "Ensure your CSV file includes 4 columns in this order: Name, Email, Password, Role.": "CSV 파일에 이름, 이메일, 비밀번호, 역할 4개의 컬럼이 순서대로 포함되어 있는지 확인하세요.", "Enter {{role}} message here": "여기에 {{role}} 메시지 입력", - "Enter a detail about yourself for your LLMs to recall": "자신에 대한 세부사항을 입력하여 LLMs가 기억할 수 있도록 하세요", + "Enter a detail about yourself for your LLMs to recall": "자신에 대한 세부사항을 입력하여 LLM들이 기억할 수 있도록 하세요.", "Enter Brave Search API Key": "Brave Search API Key 입력", "Enter Chunk Overlap": "청크 오버랩 입력", "Enter Chunk Size": "청크 크기 입력", @@ -205,45 +213,50 @@ "Enter Number of Steps (e.g. 50)": "단계 수 입력(예: 50)", "Enter Score": "점수 입력", "Enter Searxng Query URL": "Searxng 쿼리 URL 입력", - "Enter Serper API Key": "Serper API Key 입력", - "Enter Serply API Key": "", - "Enter Serpstack API Key": "Serpstack API Key 입력", + "Enter Serper API Key": "Serper API 키 입력", + "Enter Serply API Key": "Serply API 키 입력", + "Enter Serpstack API Key": "Serpstack API 키 입력", "Enter stop sequence": "중지 시퀀스 입력", - "Enter Tavily API Key": "", + "Enter Tavily API Key": "Tavily API 키 입력", "Enter Top K": "Top K 입력", "Enter URL (e.g. http://127.0.0.1:7860/)": "URL 입력(예: http://127.0.0.1:7860/)", "Enter URL (e.g. http://localhost:11434)": "URL 입력(예: http://localhost:11434)", "Enter Your Email": "이메일 입력", - "Enter Your Full Name": "전체 이름 입력", + "Enter Your Full Name": "이름 입력", "Enter Your Password": "비밀번호 입력", "Enter Your Role": "역할 입력", "Error": "오류", "Experimental": "실험적", - "Export": "수출", - "Export All Chats (All Users)": "모든 채팅 내보내기 (모든 사용자)", - "Export chat (.json)": "", + "Export": "내보내기", + "Export All Chats (All Users)": "모든 채팅 내보내기(모든 사용자)", + "Export chat (.json)": "채팅 내보내기(.json)", "Export Chats": "채팅 내보내기", "Export Documents Mapping": "문서 매핑 내보내기", + "Export Functions": "", "Export Models": "모델 내보내기", "Export Prompts": "프롬프트 내보내기", - "Export Tools": "", + "Export Tools": "도구 내보내기", "External Models": "", "Failed to create API Key.": "API 키 생성에 실패했습니다.", - "Failed to read clipboard contents": "클립보드 내용을 읽는 데 실패했습니다.", - "Failed to update settings": "", + "Failed to read clipboard contents": "클립보드 내용을 읽는 데 실패하였습니다.", + "Failed to update settings": "설정 업데이트에 실패하였습니다.", "February": "2월", - "Feel free to add specific details": "자세한 내용을 추가할 수 있습니다.", + "Feel free to add specific details": "자세한 내용을 자유롭게 추가하세요.", + "File": "", "File Mode": "파일 모드", "File not found.": "파일을 찾을 수 없습니다.", - "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "지문 스푸핑 감지됨: 이니셜을 아바타로 사용할 수 없습니다. 기본값은 기본 프로필 이미지입니다.", - "Fluidly stream large external response chunks": "대규모 외부 응답 청크를 유동적으로 스트리밍", - "Focus chat input": "채팅 입력 포커스", + "Filters": "", + "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Fingerprint spoofing 감지: 이니셜을 아바타로 사용할 수 없습니다. 기본 프로필 이미지로 설정합니다.", + "Fluidly stream large external response chunks": "대규모 외부 응답 청크를 유연하게 스트리밍", + "Focus chat input": "채팅 입력창에 포커스", "Followed instructions perfectly": "명령을 완벽히 따름", - "Format your variables using square brackets like this:": "이렇게 대괄호를 사용하여 변수를 형식화하세요:", - "Frequency Penalty": "주파수 페널티", + "Form": "", + "Format your variables using square brackets like this:": "다음과 같이 대괄호를 사용하여 변수를 형식화하세요:", + "Frequency Penalty": "프리퀀시 페널티", + "Functions": "", "General": "일반", "General Settings": "일반 설정", - "Generate Image": "", + "Generate Image": "이미지 생성", "Generating search query": "검색 쿼리 생성", "Generation Info": "생성 정보", "Good Response": "좋은 응답", @@ -254,22 +267,24 @@ "Hello, {{name}}": "안녕하세요, {{name}}", "Help": "도움말", "Hide": "숨기기", + "Hide Model": "", "How can I help you today?": "오늘 어떻게 도와드릴까요?", - "Hybrid Search": "혼합 검색", + "Hybrid Search": "하이브리드 검색", "Image Generation (Experimental)": "이미지 생성(실험적)", "Image Generation Engine": "이미지 생성 엔진", "Image Settings": "이미지 설정", "Images": "이미지", "Import Chats": "채팅 가져오기", "Import Documents Mapping": "문서 매핑 가져오기", + "Import Functions": "", "Import Models": "모델 가져오기", "Import Prompts": "프롬프트 가져오기", - "Import Tools": "", - "Include `--api` flag when running stable-diffusion-webui": "stable-diffusion-webui를 실행할 때 '--api' 플래그 포함", + "Import Tools": "도구 가져오기", + "Include `--api` flag when running stable-diffusion-webui": "stable-diffusion-webui를 실행 시 `--api` 플래그 포함 필요", "Info": "정보", "Input commands": "입력 명령", "Install from Github URL": "Github URL에서 설치", - "Instant Auto-Send After Voice Transcription": "", + "Instant Auto-Send After Voice Transcription": "음성 변환 후 즉시 자동 전송", "Interface": "인터페이스", "Invalid Tag": "잘못된 태그", "January": "1월", @@ -282,47 +297,47 @@ "JWT Token": "JWT 토큰", "Keep Alive": "계속 유지하기", "Keyboard shortcuts": "키보드 단축키", - "Knowledge": "", + "Knowledge": "지식 기반", "Language": "언어", "Last Active": "최근 활동", - "Last Modified": "", - "Light": "밝음", - "Listening...": "", - "LLMs can make mistakes. Verify important information.": "LLM은 실수를 할 수 있습니다. 중요한 정보를 확인하세요.", - "Local Models": "", + "Last Modified": "마지막 수정", + "Light": "Light", + "Listening...": "듣는 중...", + "LLMs can make mistakes. Verify important information.": "LLM은 실수를 할 수 있습니다. 중요한 정보는 확인이 필요합니다.", + "Local Models": "로컬 모델", "LTR": "LTR", - "Made by OpenWebUI Community": "OpenWebUI 커뮤니티에서 제작", - "Make sure to enclose them with": "다음으로 묶는 것을 잊지 마세요:", - "Manage": "", + "Made by OpenWebUI Community": "OpenWebUI 커뮤니티에 의해 개발됨", + "Make sure to enclose them with": "꼭 다음으로 감싸세요:", + "Manage": "관리", "Manage Models": "모델 관리", "Manage Ollama Models": "Ollama 모델 관리", "Manage Pipelines": "파이프라인 관리", "March": "3월", - "Max Tokens (num_predict)": "최대 토큰 (num_predict)", + "Max Tokens (num_predict)": "최대 토큰(num_predict)", "Maximum of 3 models can be downloaded simultaneously. Please try again later.": "최대 3개의 모델을 동시에 다운로드할 수 있습니다. 나중에 다시 시도하세요.", "May": "5월", "Memories accessible by LLMs will be shown here.": "LLM에서 액세스할 수 있는 메모리는 여기에 표시됩니다.", "Memory": "메모리", - "Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "링크를 만든 후 보낸 메시지는 공유되지 않습니다. URL이 있는 사용자는 공유 채팅을 볼 수 있습니다.", + "Messages you send after creating your link won't be shared. Users with the URL will be able to view the shared chat.": "링크 생성 후에 보낸 메시지는 공유되지 않습니다. URL이 있는 사용자는 공유된 채팅을 볼 수 있습니다.", "Minimum Score": "최소 점수", "Mirostat": "Mirostat", "Mirostat Eta": "Mirostat Eta", "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}}를 찾을 수 없습니다.", - "Model {{modelName}} is not vision capable": "모델 {{modelName}}은(는) 비전을 사용할 수 없습니다.", - "Model {{name}} is now {{status}}": "{{name}} 모델이 {{status}}로 변경되었습니다.", + "MMMM DD, YYYY hh:mm:ss A": "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}} 모델을 찾을 수 없습니다.", + "Model {{modelName}} is not vision capable": "{{modelName}} 모델은 비전을 사용할 수 없습니다.", + "Model {{name}} is now {{status}}": "{{name}} 모델은 이제 {{status}} 상태입니다.", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "모델 파일 시스템 경로가 감지되었습니다. 업데이트하려면 모델 단축 이름이 필요하며 계속할 수 없습니다.", "Model ID": "모델 ID", "Model not selected": "모델이 선택되지 않았습니다.", - "Model Params": "모델 매개 변수", - "Model Whitelisting": "모델 허용 목록", - "Model(s) Whitelisted": "허용된 모델", - "Modelfile Content": "모델파일 내용", + "Model Params": "모델 파라미터", + "Model Whitelisting": "허용 모델 명시", + "Model(s) Whitelisted": "허용 모델", + "Modelfile Content": "Modelfile 내용", "Models": "모델", "More": "더보기", "Name": "이름", @@ -330,53 +345,54 @@ "Name your model": "모델 이름 지정", "New Chat": "새 채팅", "New Password": "새 비밀번호", - "No documents found": "", + "No documents found": "문서 없음", "No results found": "결과 없음", "No search query generated": "검색어가 생성되지 않았습니다.", "No source available": "사용 가능한 소스 없음", "None": "없음", "Not factually correct": "사실상 맞지 않음", - "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "참고: 최소 점수를 설정하면 검색 결과는 최소 점수 이상의 점수를 가진 문서만 반환됩니다.", + "Note: If you set a minimum score, the search will only return documents with a score greater than or equal to the minimum score.": "참고: 최소 점수를 설정하면, 검색 결과로 최소 점수 이상의 점수를 가진 문서만 반환합니다.", "Notifications": "알림", "November": "11월", "num_thread (Ollama)": "num_thread (올라마)", "October": "10월", "Off": "끄기", - "Okay, Let's Go!": "그렇습니다, 시작합시다!", - "OLED Dark": "OLED 어두운", + "Okay, Let's Go!": "좋아요, 시작합시다!", + "OLED Dark": "OLED Dark", "Ollama": "Ollama", - "Ollama API": "올라마 API", - "Ollama API disabled": "Ollama API 사용 안 함", - "Ollama API is disabled": "", + "Ollama API": "Ollama API", + "Ollama API disabled": "Ollama API 비활성화", + "Ollama API is disabled": "Ollama API 비활성화", "Ollama Version": "Ollama 버전", "On": "켜기", "Only": "오직", "Only alphanumeric characters and hyphens are allowed in the command string.": "명령어 문자열에는 영문자, 숫자 및 하이픈만 허용됩니다.", - "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "이런! 잠시만 기다려 주세요! 파일이 아직 처리 중입니다. 완벽하게 준비하고 있습니다. 잠시만 기다려주시면 준비가 되면 알려드리겠습니다.", + "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "이런! 잠시만 기다려 주세요! 파일이 아직 처리 중입니다. 완벽을 위해 준비하고 있습니다. 준비가 되면 알려드리겠습니다.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "이런! URL이 잘못된 것 같습니다. 다시 한번 확인하고 다시 시도해주세요.", - "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "이런! 지원되지 않는 방식(프론트엔드 전용)을 사용하고 계십니다. 백엔드에서 WebUI를 제공해주세요.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", + "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "이런! 지원되지 않는 방식(프론트엔드만)을 사용하고 계십니다. 백엔드에서 WebUI를 제공해주세요.", "Open": "열기", "Open AI": "Open AI", - "Open AI (Dall-E)": "OpenAI (Dall-E)", + "Open AI (Dall-E)": "OpenAI(Dall-E)", "Open new chat": "새 채팅 열기", "OpenAI": "OpenAI", "OpenAI API": "OpenAI API", "OpenAI API Config": "OpenAI API 설정", "OpenAI API Key is required.": "OpenAI API 키가 필요합니다.", - "OpenAI URL/Key required.": "OpenAI URL/Key가 필요합니다.", + "OpenAI URL/Key required.": "OpenAI URL/키가 필요합니다.", "or": "또는", "Other": "기타", "Password": "비밀번호", - "PDF document (.pdf)": "PDF 문서 (.pdf)", - "PDF Extract Images (OCR)": "PDF에서 이미지 추출 (OCR)", + "PDF document (.pdf)": "PDF 문서(.pdf)", + "PDF Extract Images (OCR)": "PDF 이미지 추출(OCR)", "pending": "보류 중", - "Permission denied when accessing media devices": "", - "Permission denied when accessing microphone": "", + "Permission denied when accessing media devices": "미디어 장치 액세스가 거부되었습니다.", + "Permission denied when accessing microphone": "마이크 액세스가 거부되었습니다.", "Permission denied when accessing microphone: {{error}}": "마이크 액세스가 거부되었습니다: {{error}}", "Personalization": "개인화", "Pipelines": "파이프라인", "Pipelines Valves": "파이프라인 밸브", - "Plain text (.txt)": "일반 텍스트 (.txt)", + "Plain text (.txt)": "일반 텍스트(.txt)", "Playground": "놀이터", "Positive attitude": "긍정적인 자세", "Previous 30 days": "이전 30일", @@ -388,13 +404,13 @@ "Prompt suggestions": "프롬프트 제안", "Prompts": "프롬프트", "Pull \"{{searchValue}}\" from Ollama.com": "Ollama.com에서 \"{{searchValue}}\" 가져오기", - "Pull a model from Ollama.com": "Ollama.com에서 모델 가져오기", - "Query Params": "쿼리 매개변수", + "Pull a model from Ollama.com": "Ollama.com에서 모델 가져오기(pull)", + "Query Params": "쿼리 파라미터", "RAG Template": "RAG 템플릿", "Read Aloud": "읽어주기", "Record voice": "음성 녹음", - "Redirecting you to OpenWebUI Community": "OpenWebUI 커뮤니티로 리디렉션하는 중", - "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "", + "Redirecting you to OpenWebUI Community": "OpenWebUI 커뮤니티로 리디렉션 중", + "Refer to yourself as \"User\" (e.g., \"User is learning Spanish\")": "스스로를 \"User\" 라고 지칭하세요. (예: \"User is learning Spanish\")", "Refused when it shouldn't have": "허용되지 않았지만 허용되어야 합니다.", "Regenerate": "재생성", "Release Notes": "릴리스 노트", @@ -403,78 +419,82 @@ "Rename": "이름 변경", "Repeat Last N": "마지막 N 반복", "Request Mode": "요청 모드", - "Reranking Model": "랭킹 모델 재설정", - "Reranking model disabled": "랭킹 모델 재설정 비활성화", - "Reranking model set to \"{{reranking_model}}\"": "랭킹 모델 재설정을 \"{{reranking_model}}\"로 설정", - "Reset Upload Directory": "", + "Reranking Model": "Reranking 모델", + "Reranking model disabled": "Reranking 모델 비활성화", + "Reranking model set to \"{{reranking_model}}\"": "Reranking 모델을 \"{{reranking_model}}\"로 설정", + "Reset": "초기화", + "Reset Upload Directory": "업로드 디렉토리 초기화", "Reset Vector Storage": "벡터 스토리지 초기화", - "Response AutoCopy to Clipboard": "응답 자동 클립보드 복사", + "Response AutoCopy to Clipboard": "응답을 클립보드에 자동 복사", "Role": "역할", - "Rosé Pine": "로제 파인", - "Rosé Pine Dawn": "로제 파인 던", + "Rosé Pine": "Rosé Pine", + "Rosé Pine Dawn": "Rosé Pine Dawn", "RTL": "RTL", - "Running": "", + "Running": "실행 중", "Save": "저장", "Save & Create": "저장 및 생성", "Save & Update": "저장 및 업데이트", "Saving chat logs directly to your browser's storage is no longer supported. Please take a moment to download and delete your chat logs by clicking the button below. Don't worry, you can easily re-import your chat logs to the backend through": "브라우저의 저장소에 채팅 로그를 직접 저장하는 것은 더 이상 지원되지 않습니다. 아래 버튼을 클릭하여 채팅 로그를 다운로드하고 삭제하세요. 걱정 마세요. 백엔드를 통해 채팅 로그를 쉽게 다시 가져올 수 있습니다.", "Scan": "스캔", "Scan complete!": "스캔 완료!", - "Scan for documents from {{path}}": "{{path}}에서 문서 스캔", + "Scan for documents from {{path}}": "{{path}} 에서 문서 스캔", "Search": "검색", "Search a model": "모델 검색", "Search Chats": "채팅 검색", "Search Documents": "문서 검색", + "Search Functions": "", "Search Models": "모델 검색", "Search Prompts": "프롬프트 검색", - "Search Query Generation Prompt": "", - "Search Query Generation Prompt Length Threshold": "", - "Search Result Count": "검색 결과 개수", - "Search Tools": "", - "Searched {{count}} sites_other": "{{count}} sites_other 검색됨", - "Searching \"{{searchQuery}}\"": "", + "Search Query Generation Prompt": "검색 쿼리 생성 프롬프트", + "Search Query Generation Prompt Length Threshold": "검색 쿼리 생성 프롬프트 길이 임계치", + "Search Result Count": "검색 결과 수", + "Search Tools": "검색 도구", + "Searched {{count}} sites_one": "sites_one {{count}} 검색됨", + "Searched {{count}} sites_other": "sites_other {{count}} 검색됨", + "Searching \"{{searchQuery}}\"": "\"{{searchQuery}}\" 검색 중", "Searxng Query URL": "Searxng 쿼리 URL", "See readme.md for instructions": "설명은 readme.md를 참조하세요.", "See what's new": "새로운 기능 보기", "Seed": "시드", "Select a base model": "기본 모델 선택", - "Select a engine": "", + "Select a engine": "엔진 선택", "Select a mode": "모드 선택", "Select a model": "모델 선택", "Select a pipeline": "파이프라인 선택", "Select a pipeline url": "파이프라인 URL 선택", "Select an Ollama instance": "Ollama 인스턴스 선택", - "Select Documents": "", + "Select Documents": "문서 선택", "Select model": "모델 선택", - "Select only one model to call": "", + "Select only one model to call": "콜을 위해서는 모델을 하나만 선택해야 합니다.", "Selected model(s) do not support image inputs": "선택한 모델은 이미지 입력을 지원하지 않습니다.", "Send": "보내기", "Send a Message": "메시지 보내기", "Send message": "메시지 보내기", "September": "9월", "Serper API Key": "Serper API 키", - "Serply API Key": "", + "Serply API Key": "Serply API 키", "Serpstack API Key": "Serpstack API 키", "Server connection verified": "서버 연결 확인됨", "Set as default": "기본값으로 설정", "Set Default Model": "기본 모델 설정", "Set embedding model (e.g. {{model}})": "임베딩 모델 설정 (예: {{model}})", "Set Image Size": "이미지 크기 설정", - "Set reranking model (e.g. {{model}})": "랭킹 모델 설정 (예: {{model}})", + "Set reranking model (e.g. {{model}})": "reranking 모델 설정 (예: {{model}})", "Set Steps": "단계 설정", "Set Task Model": "작업 모델 설정", "Set Voice": "음성 설정", "Settings": "설정", "Settings saved successfully!": "설정이 성공적으로 저장되었습니다!", - "Settings updated successfully": "", + "Settings updated successfully": "설정이 성공적으로 업데이트되었습니다.", "Share": "공유", "Share Chat": "채팅 공유", "Share to OpenWebUI Community": "OpenWebUI 커뮤니티에 공유", "short-summary": "간단한 요약", "Show": "보이기", - "Show Admin Details in Account Pending Overlay": "", + "Show Admin Details in Account Pending Overlay": "사용자용 계정 보류 설명창에, 관리자 상세 정보 노출", + "Show Model": "", "Show shortcuts": "단축키 보기", - "Showcased creativity": "쇼케이스된 창의성", + "Showcased creativity": "창의성 발휘", "sidebar": "사이드바", "Sign in": "로그인", "Sign Out": "로그아웃", @@ -482,67 +502,74 @@ "Signing in": "로그인 중", "Source": "출처", "Speech recognition error: {{error}}": "음성 인식 오류: {{error}}", - "Speech-to-Text Engine": "음성-텍스트 엔진", + "Speech-to-Text Engine": "음성-텍스트 변환 엔진", "Stop Sequence": "중지 시퀀스", - "STT Model": "", + "STT Model": "STT 모델", "STT Settings": "STT 설정", "Submit": "제출", - "Subtitle (e.g. about the Roman Empire)": "캡션 (예: 로마 황제)", + "Subtitle (e.g. about the Roman Empire)": "자막 (예: 로마 황제)", "Success": "성공", "Successfully updated.": "성공적으로 업데이트되었습니다.", "Suggested": "제안", "System": "시스템", "System Prompt": "시스템 프롬프트", - "Tags": "Tags", - "Tavily API Key": "", + "Tags": "태그", + "Tap to interrupt": "탭하여 중단", + "Tavily API Key": "Tavily API 키", "Tell us more:": "더 알려주세요:", - "Temperature": "Temperature", - "Template": "Template", + "Temperature": "온도", + "Template": "템플릿", "Text Completion": "텍스트 완성", - "Text-to-Speech Engine": "텍스트-음성 엔진", + "Text-to-Speech Engine": "텍스트-음성 변환 엔진", "Tfs Z": "Tfs Z", - "Thanks for your feedback!": "너의 피드백 감사합니다!", - "The score should be a value between 0.0 (0%) and 1.0 (100%).": "점수는 0.0 (0%)에서 1.0 (100%) 사이의 값이어야 합니다.", + "Thanks for your feedback!": "피드백 감사합니다!", + "The score should be a value between 0.0 (0%) and 1.0 (100%).": "점수는 0.0(0%)에서 1.0(100%) 사이의 값이어야 합니다.", "Theme": "테마", - "Thinking...": "", + "Thinking...": "생각 중...", + "This action cannot be undone. Do you wish to continue?": "이 액션은 되돌릴 수 없습니다. 계속하시겠습니까?", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "이렇게 하면 소중한 대화 내용이 백엔드 데이터베이스에 안전하게 저장됩니다. 감사합니다!", - "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", + "This is an experimental feature, it may not function as expected and is subject to change at any time.": "이것은 실험적 기능으로, 예상대로 작동하지 않을 수 있으며 언제든지 변경될 수 있습니다.", "This setting does not sync across browsers or devices.": "이 설정은 브라우저 또는 장치 간에 동기화되지 않습니다.", - "Thorough explanation": "철저한 설명", + "This will delete": "이것은 다음을 삭제합니다.", + "Thorough explanation": "완전한 설명", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "팁: 각 대체 후 채팅 입력에서 탭 키를 눌러 여러 개의 변수 슬롯을 연속적으로 업데이트하세요.", "Title": "제목", "Title (e.g. Tell me a fun fact)": "제목 (예: 재미있는 사실을 알려주세요)", "Title Auto-Generation": "제목 자동 생성", "Title cannot be an empty string.": "제목은 빈 문자열일 수 없습니다.", "Title Generation Prompt": "제목 생성 프롬프트", - "to": "~까지", + "to": "까지", "To access the available model names for downloading,": "다운로드 가능한 모델명을 확인하려면,", "To access the GGUF models available for downloading,": "다운로드 가능한 GGUF 모델을 확인하려면,", - "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", - "To add documents here, upload them to the \"Documents\" workspace first.": "", + "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "WebUI에 접속하려면 관리자에게 문의하십시오. 관리자는 관리자 패널에서 사용자 상태를 관리할 수 있습니다.", + "To add documents here, upload them to the \"Documents\" workspace first.": "여기에 문서를 추가하려면, \"문서\" 워크스페이스에 먼저 업로드하세요.", "to chat input.": "채팅 입력으로.", - "To select toolkits here, add them to the \"Tools\" workspace first.": "", + "To select filters here, add them to the \"Functions\" workspace first.": "", + "To select toolkits here, add them to the \"Tools\" workspace first.": "여기서 도구를 선택하려면, \"도구\" 워크스페이스에 먼저 추가하세요.", "Today": "오늘", "Toggle settings": "설정 전환", "Toggle sidebar": "사이드바 전환", - "Tokens To Keep On Context Refresh (num_keep)": "", - "Tools": "", + "Tokens To Keep On Context Refresh (num_keep)": "컨텍스트 새로 고침 시 유지할 토큰 수(num_keep)", + "Tools": "도구", "Top K": "Top K", "Top P": "Top P", "Trouble accessing Ollama?": "Ollama에 접근하는 데 문제가 있나요?", - "TTS Model": "", + "TTS Model": "TTS 모델", "TTS Settings": "TTS 설정", - "TTS Voice": "", - "Type": "형", + "TTS Voice": "TTS 음성", + "Type": "입력", "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": "", + "UI": "UI", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", + "Update": "업데이트", "Update and Copy Link": "링크 업데이트 및 복사", "Update password": "비밀번호 업데이트", + "Updated at": "다음에 업데이트됨", + "Upload": "업로드", "Upload a GGUF model": "GGUF 모델 업로드", "Upload Files": "파일 업로드", - "Upload Pipeline": "", + "Upload Pipeline": "업로드 파이프라인", "Upload Progress": "업로드 진행 상황", "URL Mode": "URL 모드", "Use '#' in the prompt input to load and select your documents.": "프롬프트 입력에서 '#'를 사용하여 문서를 로드하고 선택하세요.", @@ -554,38 +581,38 @@ "User Permissions": "사용자 권한", "Users": "사용자", "Utilize": "활용", - "Valid time units:": "유효한 시간 단위:", + "Valid time units:": "유효 시간 단위:", "variable": "변수", "variable to have them replaced with clipboard content.": "변수를 사용하여 클립보드 내용으로 바꾸세요.", "Version": "버전", + "Voice": "음성", "Warning": "경고", - "Warning: If you update or change your embedding model, you will need to re-import all documents.": "웹 로더를 업데이트하거나 변경할 경우 모든 문서를 다시 가져와야 합니다.", + "Warning: If you update or change your embedding model, you will need to re-import all documents.": "주의: 기존 임베딩 모델을 변경 또는 업데이트하는 경우, 모든 문서를 다시 가져와야 합니다.", "Web": "웹", - "Web API": "", + "Web API": "웹 API", "Web Loader Settings": "웹 로더 설정", "Web Params": "웹 파라미터", "Web Search": "웹 검색", "Web Search Engine": "웹 검색 엔진", - "Webhook URL": "Webhook URL", - "WebUI Add-ons": "WebUI 애드온", + "Webhook URL": "웹훅 URL", "WebUI Settings": "WebUI 설정", - "WebUI will make requests to": "WebUI가 요청할 대상:", + "WebUI will make requests to": "WebUI 요청 대상:", "What’s New in": "새로운 기능:", "When history is turned off, new chats on this browser won't appear in your history on any of your devices.": "기록 기능이 꺼져 있으면 이 브라우저의 새 채팅이 다른 장치의 채팅 기록에 나타나지 않습니다.", - "Whisper (Local)": "", - "Widescreen Mode": "", + "Whisper (Local)": "Whisper (로컬)", + "Widescreen Mode": "와이드스크린 모드", "Workspace": "워크스페이스", "Write a prompt suggestion (e.g. Who are you?)": "프롬프트 제안 작성 (예: 당신은 누구인가요?)", "Write a summary in 50 words that summarizes [topic or keyword].": "[주제 또는 키워드]에 대한 50단어 요약문 작성.", "Yesterday": "어제", "You": "당신", - "You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "", + "You can personalize your interactions with LLMs by adding memories through the 'Manage' button below, making them more helpful and tailored to you.": "아래 '관리' 버튼으로 메모리를 추가하여 LLM들과의 상호작용을 개인화할 수 있습니다. 이를 통해 더 유용하고 맞춤화된 경험을 제공합니다.", "You cannot clone a base model": "기본 모델은 복제할 수 없습니다", "You have no archived conversations.": "채팅을 아카이브한 적이 없습니다.", "You have shared this chat": "이 채팅을 공유했습니다.", "You're a helpful assistant.": "당신은 유용한 어시스턴트입니다.", "You're now logged in.": "로그인되었습니다.", - "Your account status is currently pending activation.": "", + "Your account status is currently pending activation.": "현재 계정은 아직 활성화되지 않았습니다.", "Youtube": "유튜브", "Youtube Loader Settings": "유튜브 로더 설정" } diff --git a/src/lib/i18n/locales/lt-LT/translation.json b/src/lib/i18n/locales/lt-LT/translation.json index fc69fd5bc1..c3b3a207fd 100644 --- a/src/lib/i18n/locales/lt-LT/translation.json +++ b/src/lib/i18n/locales/lt-LT/translation.json @@ -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", @@ -81,6 +82,7 @@ "Capabilities": "", "Change Password": "Keisti slaptažodį", "Chat": "Pokalbis", + "Chat Background Image": "", "Chat Bubble UI": "", "Chat direction": "", "Chat History": "Pokalbių istorija", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "Paspauskite čia dėl pagalbos.", "Click here to": "Paspauskite čia, kad:", + "Click here to download user import template file.": "", "Click here to select": "Spauskite čia norėdami pasirinkti", "Click here to select a csv file.": "Spauskite čia tam, kad pasirinkti csv failą", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "ComfyUI bazės nuoroda privaloma", "Command": "Command", "Concurrent Requests": "", + "Confirm": "", "Confirm Password": "Patvirtinkite slaptažodį", + "Confirm your action": "", "Connections": "Ryšiai", "Contact Admin for WebUI Access": "", "Content": "Turinys", @@ -130,6 +135,8 @@ "Create new secret key": "Sukurti naują slaptą raktą", "Created at": "Sukurta", "Created At": "Sukurta", + "Created by": "", + "CSV Import": "", "Current Model": "Dabartinis modelis", "Current Password": "Esamas slaptažodis", "Custom": "Personalizuota", @@ -151,6 +158,7 @@ "Delete All Chats": "", "Delete chat": "Išrinti pokalbį", "Delete Chat": "Ištrinti pokalbį", + "Delete chat?": "", "delete this link": "Ištrinti nuorodą", "Delete User": "Ištrinti naudotoją", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} ištrinta", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "Eksportuoti pokalbius", "Export Documents Mapping": "Eksportuoti dokumentų žemėlapį", + "Export Functions": "", "Export Models": "", "Export Prompts": "Eksportuoti užklausas", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "Vasaris", "Feel free to add specific details": "Galite pridėti specifinių detalių", + "File": "", "File Mode": "Dokumentų rėžimas", "File not found.": "Failas nerastas.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Nepavyko nsutatyti profilio nuotraukos", "Fluidly stream large external response chunks": "Sklandžiai transliuoti ilgus atsakymus", "Focus chat input": "Fokusuoti žinutės įvestį", "Followed instructions perfectly": "Tobulai sekė instrukcijas", + "Form": "", "Format your variables using square brackets like this:": "Formatuokite kintamuosius su kvadratiniais skliausteliais:", "Frequency Penalty": "", + "Functions": "", "General": "Bendri", "General Settings": "Bendri nustatymai", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Sveiki, {{name}}", "Help": "Pagalba", "Hide": "Paslėpti", + "Hide Model": "", "How can I help you today?": "Kuo galėčiau Jums padėti ?", "Hybrid Search": "Hibridinė paieška", "Image Generation (Experimental)": "Vaizdų generavimas (eksperimentinis)", @@ -262,6 +276,7 @@ "Images": "Vaizdai", "Import Chats": "Importuoti pokalbius", "Import Documents Mapping": "Importuoti dokumentų žemėlapį", + "Import Functions": "", "Import Models": "", "Import Prompts": "Importuoti užklausas", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Leistinos tik raidės, skaičiai ir brūkšneliai.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Jūsų failai vis dar tvarkomi.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oops! Looks like the URL is invalid. Please double-check and try again.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Naudojate nepalaikomą (front-end) web ui rėžimą. Prašau serviruokite WebUI iš back-end", "Open": "Atverti", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "Reranking modelis", "Reranking model disabled": "Reranking modelis neleidžiamas", "Reranking model set to \"{{reranking_model}}\"": "Nustatytas rereanking modelis: \"{{reranking_model}}\"", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "Reinicializuoti vektorių atmintį", "Response AutoCopy to Clipboard": "Automatiškai nukopijuoti atsakymą", @@ -425,6 +442,7 @@ "Search a model": "Ieškoti modelio", "Search Chats": "", "Search Documents": "Ieškoti dokumentų", + "Search Functions": "", "Search Models": "", "Search Prompts": "Ieškoti užklausų", "Search Query Generation Prompt": "", @@ -476,6 +494,7 @@ "short-summary": "trumpinys", "Show": "Rodyti", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Rodyti trumpinius", "Showcased creativity": "Kūrybingų užklausų paroda", "sidebar": "šoninis meniu", @@ -497,6 +516,7 @@ "System": "Sistema", "System Prompt": "Sistemos užklausa", "Tags": "Žymos", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "Papasakokite daugiau", "Temperature": "Temperatūra", @@ -508,9 +528,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Rezultatas turėtų būti tarp 0.0 (0%) ir 1.0 (100%)", "Theme": "Tema", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Tai užtikrina, kad Jūsų pokalbiai saugiai saugojami duomenų bazėje. Ačiū!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "Šis parametras nesisinchronizuoja su skirtingomis naršyklėmis ir įrankiais.", + "This will delete": "", "Thorough explanation": "Platus paaiškinimas", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Jei norite pakeisti keletą kintamųjų vieną po kitos, spauskite Tab", "Title": "Pavadinimas", @@ -524,6 +546,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "į pokalbio įvestį", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Šiandien", "Toggle settings": "Atverti/užverti parametrus", @@ -539,10 +562,13 @@ "Type": "", "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", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Atnaujinti ir kopijuoti nuorodą", "Update password": "Atnaujinti slaptažodį", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "Parsisiųsti GGUF modelį", "Upload Files": "", "Upload Pipeline": "", @@ -561,6 +587,7 @@ "variable": "kintamasis", "variable to have them replaced with clipboard content.": "kintamoji pakeičiama kopijuoklės turiniu.", "Version": "Versija", + "Voice": "", "Warning": "", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Jei pakeisite embedding modelį, turėsite reimportuoti visus dokumentus", "Web": "Web", @@ -570,7 +597,6 @@ "Web Search": "", "Web Search Engine": "", "Webhook URL": "Webhook nuoroda", - "WebUI Add-ons": "WebUI priedai", "WebUI Settings": "WebUI parametrai", "WebUI will make requests to": "WebUI vykdys užklausas", "What’s New in": "Kas naujo", diff --git a/src/lib/i18n/locales/nb-NO/translation.json b/src/lib/i18n/locales/nb-NO/translation.json index b98206b992..58fe795b82 100644 --- a/src/lib/i18n/locales/nb-NO/translation.json +++ b/src/lib/i18n/locales/nb-NO/translation.json @@ -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", @@ -81,6 +82,7 @@ "Capabilities": "Muligheter", "Change Password": "Endre passord", "Chat": "Chat", + "Chat Background Image": "", "Chat Bubble UI": "Chat-boble UI", "Chat direction": "Chat-retning", "Chat History": "Chat-historikk", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "Klikk her for hjelp.", "Click here to": "Klikk her for å", + "Click here to download user import template file.": "", "Click here to select": "Klikk her for å velge", "Click here to select a csv file.": "Klikk her for å velge en csv-fil.", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "ComfyUI Grunn-URL kreves.", "Command": "Kommando", "Concurrent Requests": "Samtidige forespørsler", + "Confirm": "", "Confirm Password": "Bekreft passord", + "Confirm your action": "", "Connections": "Tilkoblinger", "Contact Admin for WebUI Access": "", "Content": "Innhold", @@ -130,6 +135,8 @@ "Create new secret key": "Lag ny hemmelig nøkkel", "Created at": "Opprettet", "Created At": "Opprettet", + "Created by": "", + "CSV Import": "", "Current Model": "Nåværende modell", "Current Password": "Nåværende passord", "Custom": "Tilpasset", @@ -151,6 +158,7 @@ "Delete All Chats": "Slett alle chatter", "Delete chat": "Slett chat", "Delete Chat": "Slett chat", + "Delete chat?": "", "delete this link": "slett denne lenken", "Delete User": "Slett bruker", "Deleted {{deleteModelTag}}": "Slettet {{deleteModelTag}}", @@ -224,6 +232,7 @@ "Export chat (.json)": "Eksporter chat (.json)", "Export Chats": "Eksporter chatter", "Export Documents Mapping": "Eksporter dokumentkartlegging", + "Export Functions": "", "Export Models": "Eksporter modeller", "Export Prompts": "Eksporter prompts", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "Kunne ikke oppdatere innstillinger", "February": "Februar", "Feel free to add specific details": "Føl deg fri til å legge til spesifikke detaljer", + "File": "", "File Mode": "Filmodus", "File not found.": "Fil ikke funnet.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Fingeravtrykk-spoofing oppdaget: Kan ikke bruke initialer som avatar. Bruker standard profilbilde.", "Fluidly stream large external response chunks": "Strøm store eksterne svarchunks flytende", "Focus chat input": "Fokuser chatinput", "Followed instructions perfectly": "Fulgte instruksjonene perfekt", + "Form": "", "Format your variables using square brackets like this:": "Formatér variablene dine med hakeparenteser som dette:", "Frequency Penalty": "Frekvensstraff", + "Functions": "", "General": "Generelt", "General Settings": "Generelle innstillinger", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Hei, {{name}}", "Help": "Hjelp", "Hide": "Skjul", + "Hide Model": "", "How can I help you today?": "Hvordan kan jeg hjelpe deg i dag?", "Hybrid Search": "Hybrid-søk", "Image Generation (Experimental)": "Bildegenerering (Eksperimentell)", @@ -262,6 +276,7 @@ "Images": "Bilder", "Import Chats": "Importer chatter", "Import Documents Mapping": "Importer dokumentkartlegging", + "Import Functions": "", "Import Models": "Importer modeller", "Import Prompts": "Importer prompts", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Kun alfanumeriske tegn og bindestreker er tillatt i kommandostrengen.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Oops! Hold deg fast! Filene dine er fortsatt i prosesseringsovnen. Vi tilbereder dem til perfeksjon. Vennligst vær tålmodig, vi gir beskjed når de er klare.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oops! Ser ut som URL-en er ugyldig. Vennligst dobbeltsjekk og prøv igjen.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oops! Du bruker en ikke-støttet metode (kun frontend). Vennligst server WebUI fra backend.", "Open": "Åpne", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "Reranking-modell", "Reranking model disabled": "Reranking-modell deaktivert", "Reranking model set to \"{{reranking_model}}\"": "Reranking-modell satt til \"{{reranking_model}}\"", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "Tilbakestill vektorlagring", "Response AutoCopy to Clipboard": "Respons auto-kopi til utklippstavle", @@ -425,6 +442,7 @@ "Search a model": "Søk en modell", "Search Chats": "Søk chatter", "Search Documents": "Søk dokumenter", + "Search Functions": "", "Search Models": "Søk modeller", "Search Prompts": "Søk prompter", "Search Query Generation Prompt": "", @@ -474,6 +492,7 @@ "short-summary": "kort sammendrag", "Show": "Vis", "Show Admin Details in Account Pending Overlay": "Vis administratordetaljer i ventende kontooverlay", + "Show Model": "", "Show shortcuts": "Vis snarveier", "Showcased creativity": "Vist frem kreativitet", "sidebar": "sidefelt", @@ -495,6 +514,7 @@ "System": "System", "System Prompt": "Systemprompt", "Tags": "Tagger", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "Fortell oss mer:", "Temperature": "Temperatur", @@ -506,9 +526,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Poengsummen skal være en verdi mellom 0,0 (0%) og 1,0 (100%).", "Theme": "Tema", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Dette sikrer at dine verdifulle samtaler er trygt lagret i backend-databasen din. Takk!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "Denne innstillingen synkroniseres ikke mellom nettlesere eller enheter.", + "This will delete": "", "Thorough explanation": "Grundig forklaring", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Tips: Oppdater flere variabelplasser etter hverandre ved å trykke på tab-tasten i chatinputen etter hver erstatning.", "Title": "Tittel", @@ -522,6 +544,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "til chatinput.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "I dag", "Toggle settings": "Veksle innstillinger", @@ -537,10 +560,13 @@ "Type": "Type", "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", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Oppdater og kopier lenke", "Update password": "Oppdater passord", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "Last opp en GGUF-modell", "Upload Files": "Last opp filer", "Upload Pipeline": "", @@ -559,6 +585,7 @@ "variable": "variabel", "variable to have them replaced with clipboard content.": "variabel for å få dem erstattet med utklippstavleinnhold.", "Version": "Versjon", + "Voice": "", "Warning": "Advarsel", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Advarsel: Hvis du oppdaterer eller endrer embedding-modellen din, må du re-importere alle dokumenter.", "Web": "Web", @@ -568,7 +595,6 @@ "Web Search": "Websøk", "Web Search Engine": "Websøkemotor", "Webhook URL": "Webhook URL", - "WebUI Add-ons": "WebUI tillegg", "WebUI Settings": "WebUI innstillinger", "WebUI will make requests to": "WebUI vil gjøre forespørsler til", "What’s New in": "Hva er nytt i", diff --git a/src/lib/i18n/locales/nl-NL/translation.json b/src/lib/i18n/locales/nl-NL/translation.json index e2562370a8..3695282653 100644 --- a/src/lib/i18n/locales/nl-NL/translation.json +++ b/src/lib/i18n/locales/nl-NL/translation.json @@ -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", @@ -81,6 +82,7 @@ "Capabilities": "Mogelijkheden", "Change Password": "Wijzig Wachtwoord", "Chat": "Chat", + "Chat Background Image": "", "Chat Bubble UI": "Chat Bubble UI", "Chat direction": "Chat Richting", "Chat History": "Chat Geschiedenis", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "Klik hier voor hulp.", "Click here to": "Klik hier om", + "Click here to download user import template file.": "", "Click here to select": "Klik hier om te selecteren", "Click here to select a csv file.": "Klik hier om een csv file te selecteren.", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "ComfyUI Base URL is required.", "Command": "Commando", "Concurrent Requests": "Gelijktijdige verzoeken", + "Confirm": "", "Confirm Password": "Bevestig Wachtwoord", + "Confirm your action": "", "Connections": "Verbindingen", "Contact Admin for WebUI Access": "", "Content": "Inhoud", @@ -130,6 +135,8 @@ "Create new secret key": "Maak nieuwe geheim sleutel", "Created at": "Gemaakt op", "Created At": "Gemaakt op", + "Created by": "", + "CSV Import": "", "Current Model": "Huidig Model", "Current Password": "Huidig Wachtwoord", "Custom": "Aangepast", @@ -151,6 +158,7 @@ "Delete All Chats": "Verwijder alle chats", "Delete chat": "Verwijder chat", "Delete Chat": "Verwijder Chat", + "Delete chat?": "", "delete this link": "verwijder deze link", "Delete User": "Verwijder Gebruiker", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} is verwijderd", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "Exporteer Chats", "Export Documents Mapping": "Exporteer Documenten Mapping", + "Export Functions": "", "Export Models": "Modellen exporteren", "Export Prompts": "Exporteer Prompts", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "Februarij", "Feel free to add specific details": "Voeg specifieke details toe", + "File": "", "File Mode": "Bestandsmodus", "File not found.": "Bestand niet gevonden.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Vingerafdruk spoofing gedetecteerd: kan initialen niet gebruiken als avatar. Standaardprofielafbeelding wordt gebruikt.", "Fluidly stream large external response chunks": "Stream vloeiend grote externe responsbrokken", "Focus chat input": "Focus chat input", "Followed instructions perfectly": "Volgde instructies perfect", + "Form": "", "Format your variables using square brackets like this:": "Formatteer je variabelen met vierkante haken zoals dit:", "Frequency Penalty": "Frequentie Straf", + "Functions": "", "General": "Algemeen", "General Settings": "Algemene Instellingen", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Hallo, {{name}}", "Help": "Help", "Hide": "Verberg", + "Hide Model": "", "How can I help you today?": "Hoe kan ik je vandaag helpen?", "Hybrid Search": "Hybride Zoeken", "Image Generation (Experimental)": "Afbeelding Generatie (Experimenteel)", @@ -262,6 +276,7 @@ "Images": "Afbeeldingen", "Import Chats": "Importeer Chats", "Import Documents Mapping": "Importeer Documenten Mapping", + "Import Functions": "", "Import Models": "Modellen importeren", "Import Prompts": "Importeer Prompts", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Alleen alfanumerieke karakters en streepjes zijn toegestaan in de commando string.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Oops! Houd vast! Je bestanden zijn nog steeds in de verwerkingsoven. We zijn ze aan het bereiden tot perfectie. Wees geduldig en we laten je weten wanneer ze klaar zijn.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Oops! Het lijkt erop dat de URL ongeldig is. Controleer het nogmaals en probeer opnieuw.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Oops! Je gebruikt een niet-ondersteunde methode (alleen frontend). Serveer de WebUI vanuit de backend.", "Open": "Open", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "Reranking Model", "Reranking model disabled": "Reranking model uitgeschakeld", "Reranking model set to \"{{reranking_model}}\"": "Reranking model ingesteld op \"{{reranking_model}}\"", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "Reset Vector Opslag", "Response AutoCopy to Clipboard": "Antwoord Automatisch Kopiëren naar Klembord", @@ -425,6 +442,7 @@ "Search a model": "Zoek een model", "Search Chats": "Chats zoeken", "Search Documents": "Zoek Documenten", + "Search Functions": "", "Search Models": "Modellen zoeken", "Search Prompts": "Zoek Prompts", "Search Query Generation Prompt": "", @@ -474,6 +492,7 @@ "short-summary": "korte-samenvatting", "Show": "Toon", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Toon snelkoppelingen", "Showcased creativity": "Tooncase creativiteit", "sidebar": "sidebar", @@ -495,6 +514,7 @@ "System": "Systeem", "System Prompt": "Systeem Prompt", "Tags": "Tags", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "Vertel ons meer:", "Temperature": "Temperatuur", @@ -506,9 +526,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Het score moet een waarde zijn tussen 0.0 (0%) en 1.0 (100%).", "Theme": "Thema", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Dit zorgt ervoor dat je waardevolle gesprekken veilig worden opgeslagen in je backend database. Dank je wel!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "Deze instelling wordt niet gesynchroniseerd tussen browsers of apparaten.", + "This will delete": "", "Thorough explanation": "Gevorderde uitleg", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Tip: Werk meerdere variabele slots achtereenvolgens bij door op de tab-toets te drukken in de chat input na elke vervanging.", "Title": "Titel", @@ -522,6 +544,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "naar chat input.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Vandaag", "Toggle settings": "Wissel instellingen", @@ -537,10 +560,13 @@ "Type": "Type", "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", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Update en Kopieer Link", "Update password": "Wijzig wachtwoord", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "Upload een GGUF model", "Upload Files": "Bestanden uploaden", "Upload Pipeline": "", @@ -559,6 +585,7 @@ "variable": "variabele", "variable to have them replaced with clipboard content.": "variabele om ze te laten vervangen door klembord inhoud.", "Version": "Versie", + "Voice": "", "Warning": "Waarschuwing", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Warning: Als je de embedding model bijwerkt of wijzigt, moet je alle documenten opnieuw importeren.", "Web": "Web", @@ -568,7 +595,6 @@ "Web Search": "Zoeken op het web", "Web Search Engine": "Zoekmachine op het web", "Webhook URL": "Webhook URL", - "WebUI Add-ons": "WebUI Add-ons", "WebUI Settings": "WebUI Instellingen", "WebUI will make requests to": "WebUI zal verzoeken doen naar", "What’s New in": "Wat is nieuw in", diff --git a/src/lib/i18n/locales/pa-IN/translation.json b/src/lib/i18n/locales/pa-IN/translation.json index f83736b507..683db9a975 100644 --- a/src/lib/i18n/locales/pa-IN/translation.json +++ b/src/lib/i18n/locales/pa-IN/translation.json @@ -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": "ਇੱਕ ਸਹਾਇਕ", @@ -81,6 +82,7 @@ "Capabilities": "ਸਮਰੱਥਾਵਾਂ", "Change Password": "ਪਾਸਵਰਡ ਬਦਲੋ", "Chat": "ਗੱਲਬਾਤ", + "Chat Background Image": "", "Chat Bubble UI": "ਗੱਲਬਾਤ ਬਬਲ UI", "Chat direction": "ਗੱਲਬਾਤ ਡਿਰੈਕਟਨ", "Chat History": "ਗੱਲਬਾਤ ਦਾ ਇਤਿਹਾਸ", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "ਮਦਦ ਲਈ ਇੱਥੇ ਕਲਿੱਕ ਕਰੋ।", "Click here to": "ਇੱਥੇ ਕਲਿੱਕ ਕਰੋ", + "Click here to download user import template file.": "", "Click here to select": "ਚੁਣਨ ਲਈ ਇੱਥੇ ਕਲਿੱਕ ਕਰੋ", "Click here to select a csv file.": "CSV ਫਾਈਲ ਚੁਣਨ ਲਈ ਇੱਥੇ ਕਲਿੱਕ ਕਰੋ।", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "ਕੰਫੀਯੂਆਈ ਬੇਸ URL ਦੀ ਲੋੜ ਹੈ।", "Command": "ਕਮਾਂਡ", "Concurrent Requests": "ਸਮਕਾਲੀ ਬੇਨਤੀਆਂ", + "Confirm": "", "Confirm Password": "ਪਾਸਵਰਡ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ", + "Confirm your action": "", "Connections": "ਕਨੈਕਸ਼ਨ", "Contact Admin for WebUI Access": "", "Content": "ਸਮੱਗਰੀ", @@ -130,6 +135,8 @@ "Create new secret key": "ਨਵੀਂ ਗੁਪਤ ਕੁੰਜੀ ਬਣਾਓ", "Created at": "ਤੇ ਬਣਾਇਆ ਗਿਆ", "Created At": "ਤੇ ਬਣਾਇਆ ਗਿਆ", + "Created by": "", + "CSV Import": "", "Current Model": "ਮੌਜੂਦਾ ਮਾਡਲ", "Current Password": "ਮੌਜੂਦਾ ਪਾਸਵਰਡ", "Custom": "ਕਸਟਮ", @@ -151,6 +158,7 @@ "Delete All Chats": "ਸਾਰੀਆਂ ਚੈਟਾਂ ਨੂੰ ਮਿਟਾਓ", "Delete chat": "ਗੱਲਬਾਤ ਮਿਟਾਓ", "Delete Chat": "ਗੱਲਬਾਤ ਮਿਟਾਓ", + "Delete chat?": "", "delete this link": "ਇਸ ਲਿੰਕ ਨੂੰ ਮਿਟਾਓ", "Delete User": "ਉਪਭੋਗਤਾ ਮਿਟਾਓ", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} ਮਿਟਾਇਆ ਗਿਆ", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "ਗੱਲਾਂ ਨਿਰਯਾਤ ਕਰੋ", "Export Documents Mapping": "ਡਾਕੂਮੈਂਟ ਮੈਪਿੰਗ ਨਿਰਯਾਤ ਕਰੋ", + "Export Functions": "", "Export Models": "ਨਿਰਯਾਤ ਮਾਡਲ", "Export Prompts": "ਪ੍ਰੰਪਟ ਨਿਰਯਾਤ ਕਰੋ", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "ਫਰਵਰੀ", "Feel free to add specific details": "ਖੁੱਲ੍ਹੇ ਦਿਲ ਨਾਲ ਖਾਸ ਵੇਰਵੇ ਸ਼ਾਮਲ ਕਰੋ", + "File": "", "File Mode": "ਫਾਈਲ ਮੋਡ", "File not found.": "ਫਾਈਲ ਨਹੀਂ ਮਿਲੀ।", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "ਫਿੰਗਰਪ੍ਰਿੰਟ ਸਪੂਫਿੰਗ ਪਾਈ ਗਈ: ਅਵਤਾਰ ਵਜੋਂ ਸ਼ੁਰੂਆਤੀ ਅੱਖਰ ਵਰਤਣ ਵਿੱਚ ਅਸਮਰੱਥ। ਮੂਲ ਪ੍ਰੋਫਾਈਲ ਚਿੱਤਰ 'ਤੇ ਡਿਫਾਲਟ।", "Fluidly stream large external response chunks": "ਵੱਡੇ ਬਾਹਰੀ ਜਵਾਬ ਚੰਕਾਂ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਸਟ੍ਰੀਮ ਕਰੋ", "Focus chat input": "ਗੱਲਬਾਤ ਇਨਪੁਟ 'ਤੇ ਧਿਆਨ ਦਿਓ", "Followed instructions perfectly": "ਹਦਾਇਤਾਂ ਨੂੰ ਬਿਲਕੁਲ ਫਾਲੋ ਕੀਤਾ", + "Form": "", "Format your variables using square brackets like this:": "ਤੁਹਾਡੀਆਂ ਵੈਰੀਏਬਲਾਂ ਨੂੰ ਇਸ ਤਰ੍ਹਾਂ ਵਰਤੋਂ: [ ]", "Frequency Penalty": "ਬਾਰੰਬਾਰਤਾ ਜੁਰਮਾਨਾ", + "Functions": "", "General": "ਆਮ", "General Settings": "ਆਮ ਸੈਟਿੰਗਾਂ", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "ਸਤ ਸ੍ਰੀ ਅਕਾਲ, {{name}}", "Help": "ਮਦਦ", "Hide": "ਲੁਕਾਓ", + "Hide Model": "", "How can I help you today?": "ਮੈਂ ਅੱਜ ਤੁਹਾਡੀ ਕਿਵੇਂ ਮਦਦ ਕਰ ਸਕਦਾ ਹਾਂ?", "Hybrid Search": "ਹਾਈਬ੍ਰਿਡ ਖੋਜ", "Image Generation (Experimental)": "ਚਿੱਤਰ ਜਨਰੇਸ਼ਨ (ਪਰਮਾਣੂਕ੍ਰਿਤ)", @@ -262,6 +276,7 @@ "Images": "ਚਿੱਤਰ", "Import Chats": "ਗੱਲਾਂ ਆਯਾਤ ਕਰੋ", "Import Documents Mapping": "ਡਾਕੂਮੈਂਟ ਮੈਪਿੰਗ ਆਯਾਤ ਕਰੋ", + "Import Functions": "", "Import Models": "ਮਾਡਲ ਆਯਾਤ ਕਰੋ", "Import Prompts": "ਪ੍ਰੰਪਟ ਆਯਾਤ ਕਰੋ", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "ਕਮਾਂਡ ਸਤਰ ਵਿੱਚ ਸਿਰਫ਼ ਅਲਫ਼ਾਨਯੂਮੈਰਿਕ ਅੱਖਰ ਅਤੇ ਹਾਈਫਨ ਦੀ ਆਗਿਆ ਹੈ।", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "ਓਹੋ! ਥੋੜਾ ਸਬਰ ਕਰੋ! ਤੁਹਾਡੀਆਂ ਫਾਈਲਾਂ ਅਜੇ ਵੀ ਪ੍ਰਕਿਰਿਆ ਵਿੱਚ ਹਨ। ਅਸੀਂ ਉਨ੍ਹਾਂ ਨੂੰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਤਿਆਰ ਕਰ ਰਹੇ ਹਾਂ। ਕਿਰਪਾ ਕਰਕੇ ਧੀਰਜ ਰੱਖੋ ਅਤੇ ਅਸੀਂ ਤੁਹਾਨੂੰ ਦੱਸਾਂਗੇ ਜਦੋਂ ਉਹ ਤਿਆਰ ਹੋ ਜਾਣਗੇ।", "Oops! Looks like the URL is invalid. Please double-check and try again.": "ਓਹੋ! ਲੱਗਦਾ ਹੈ ਕਿ URL ਗਲਤ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਜਾਂਚ ਕਰੋ ਅਤੇ ਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰੋ।", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "ਓਹੋ! ਤੁਸੀਂ ਇੱਕ ਅਣਸਮਰਥਿਤ ਢੰਗ ਵਰਤ ਰਹੇ ਹੋ (ਸਿਰਫ਼ ਫਰੰਟਐਂਡ)। ਕਿਰਪਾ ਕਰਕੇ ਵੈਬਯੂਆਈ ਨੂੰ ਬੈਕਐਂਡ ਤੋਂ ਸਰਵ ਕਰੋ।", "Open": "ਖੋਲ੍ਹੋ", "Open AI": "ਓਪਨ ਏਆਈ", @@ -406,6 +422,7 @@ "Reranking Model": "ਮਾਡਲ ਮੁੜ ਰੈਂਕਿੰਗ", "Reranking model disabled": "ਮਾਡਲ ਮੁੜ ਰੈਂਕਿੰਗ ਅਯੋਗ ਕੀਤਾ ਗਿਆ", "Reranking model set to \"{{reranking_model}}\"": "ਮਾਡਲ ਮੁੜ ਰੈਂਕਿੰਗ ਨੂੰ \"{{reranking_model}}\" 'ਤੇ ਸੈੱਟ ਕੀਤਾ ਗਿਆ", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "ਵੈਕਟਰ ਸਟੋਰੇਜ ਨੂੰ ਰੀਸੈਟ ਕਰੋ", "Response AutoCopy to Clipboard": "ਜਵਾਬ ਆਟੋ ਕਾਪੀ ਕਲਿੱਪਬੋਰਡ 'ਤੇ", @@ -425,6 +442,7 @@ "Search a model": "ਇੱਕ ਮਾਡਲ ਖੋਜੋ", "Search Chats": "ਖੋਜ ਚੈਟਾਂ", "Search Documents": "ਡਾਕੂਮੈਂਟ ਖੋਜੋ", + "Search Functions": "", "Search Models": "ਖੋਜ ਮਾਡਲ", "Search Prompts": "ਪ੍ਰੰਪਟ ਖੋਜੋ", "Search Query Generation Prompt": "", @@ -474,6 +492,7 @@ "short-summary": "ਛੋਟੀ-ਸੰਖੇਪ", "Show": "ਦਿਖਾਓ", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "ਸ਼ਾਰਟਕਟ ਦਿਖਾਓ", "Showcased creativity": "ਸਿਰਜਣਾਤਮਕਤਾ ਦਿਖਾਈ", "sidebar": "ਸਾਈਡਬਾਰ", @@ -495,6 +514,7 @@ "System": "ਸਿਸਟਮ", "System Prompt": "ਸਿਸਟਮ ਪ੍ਰੰਪਟ", "Tags": "ਟੈਗ", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "ਸਾਨੂੰ ਹੋਰ ਦੱਸੋ:", "Temperature": "ਤਾਪਮਾਨ", @@ -506,9 +526,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "ਸਕੋਰ 0.0 (0%) ਅਤੇ 1.0 (100%) ਦੇ ਵਿਚਕਾਰ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।", "Theme": "ਥੀਮ", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਤੁਹਾਡੀਆਂ ਕੀਮਤੀ ਗੱਲਾਂ ਤੁਹਾਡੇ ਬੈਕਐਂਡ ਡਾਟਾਬੇਸ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਤੌਰ 'ਤੇ ਸੰਭਾਲੀਆਂ ਗਈਆਂ ਹਨ। ਧੰਨਵਾਦ!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "ਇਹ ਸੈਟਿੰਗ ਬ੍ਰਾਊਜ਼ਰ ਜਾਂ ਡਿਵਾਈਸਾਂ ਵਿੱਚ ਸਿੰਕ ਨਹੀਂ ਹੁੰਦੀ।", + "This will delete": "", "Thorough explanation": "ਵਿਸਥਾਰ ਨਾਲ ਵਿਆਖਿਆ", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "ਸਲਾਹ: ਹਰ ਬਦਲਾਅ ਦੇ ਬਾਅਦ ਗੱਲਬਾਤ ਇਨਪੁਟ ਵਿੱਚ ਟੈਬ ਕੀ ਦਬਾ ਕੇ ਲਗਾਤਾਰ ਕਈ ਵੈਰੀਏਬਲ ਸਲਾਟਾਂ ਨੂੰ ਅੱਪਡੇਟ ਕਰੋ।", "Title": "ਸਿਰਲੇਖ", @@ -522,6 +544,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "ਗੱਲਬਾਤ ਇਨਪੁਟ ਲਈ।", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "ਅੱਜ", "Toggle settings": "ਸੈਟਿੰਗਾਂ ਟੌਗਲ ਕਰੋ", @@ -537,10 +560,13 @@ "Type": "ਕਿਸਮ", "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}}', ਪਰ ਸਧਾਰਨ ਪਾਠ ਵਜੋਂ ਸਵੀਕਾਰ ਕਰਦੇ ਹੋਏ", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "ਅੱਪਡੇਟ ਕਰੋ ਅਤੇ ਲਿੰਕ ਕਾਪੀ ਕਰੋ", "Update password": "ਪਾਸਵਰਡ ਅੱਪਡੇਟ ਕਰੋ", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "ਇੱਕ GGUF ਮਾਡਲ ਅਪਲੋਡ ਕਰੋ", "Upload Files": "ਫਾਇਲਾਂ ਅੱਪਲੋਡ ਕਰੋ", "Upload Pipeline": "", @@ -559,6 +585,7 @@ "variable": "ਵੈਰੀਏਬਲ", "variable to have them replaced with clipboard content.": "ਕਲਿੱਪਬੋਰਡ ਸਮੱਗਰੀ ਨਾਲ ਬਦਲਣ ਲਈ ਵੈਰੀਏਬਲ।", "Version": "ਵਰਜਨ", + "Voice": "", "Warning": "ਚੇਤਾਵਨੀ", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "ਚੇਤਾਵਨੀ: ਜੇ ਤੁਸੀਂ ਆਪਣਾ ਐਮਬੈੱਡਿੰਗ ਮਾਡਲ ਅੱਪਡੇਟ ਜਾਂ ਬਦਲਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਨੂੰ ਸਾਰੇ ਡਾਕੂਮੈਂਟ ਮੁੜ ਆਯਾਤ ਕਰਨ ਦੀ ਲੋੜ ਹੋਵੇਗੀ।", "Web": "ਵੈਬ", @@ -568,7 +595,6 @@ "Web Search": "ਵੈੱਬ ਖੋਜ", "Web Search Engine": "ਵੈੱਬ ਖੋਜ ਇੰਜਣ", "Webhook URL": "ਵੈਬਹੁੱਕ URL", - "WebUI Add-ons": "ਵੈਬਯੂਆਈ ਐਡ-ਆਨ", "WebUI Settings": "ਵੈਬਯੂਆਈ ਸੈਟਿੰਗਾਂ", "WebUI will make requests to": "ਵੈਬਯੂਆਈ ਬੇਨਤੀਆਂ ਕਰੇਗਾ", "What’s New in": "ਨਵਾਂ ਕੀ ਹੈ", diff --git a/src/lib/i18n/locales/pl-PL/translation.json b/src/lib/i18n/locales/pl-PL/translation.json index 767fe60c89..aaf6794d4d 100644 --- a/src/lib/i18n/locales/pl-PL/translation.json +++ b/src/lib/i18n/locales/pl-PL/translation.json @@ -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", @@ -81,6 +82,7 @@ "Capabilities": "Możliwości", "Change Password": "Zmień hasło", "Chat": "Czat", + "Chat Background Image": "", "Chat Bubble UI": "Bąbelki czatu", "Chat direction": "Kierunek czatu", "Chat History": "Historia czatu", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "Kliknij tutaj, aby uzyskać pomoc.", "Click here to": "Kliknij tutaj, żeby", + "Click here to download user import template file.": "", "Click here to select": "Kliknij tutaj, aby wybrać", "Click here to select a csv file.": "Kliknij tutaj, żeby wybrać plik CSV", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "Bazowy URL ComfyUI jest wymagany.", "Command": "Polecenie", "Concurrent Requests": "Równoczesne żądania", + "Confirm": "", "Confirm Password": "Potwierdź hasło", + "Confirm your action": "", "Connections": "Połączenia", "Contact Admin for WebUI Access": "", "Content": "Zawartość", @@ -130,6 +135,8 @@ "Create new secret key": "Utwórz nowy klucz bezpieczeństwa", "Created at": "Utworzono o", "Created At": "Utworzono o", + "Created by": "", + "CSV Import": "", "Current Model": "Bieżący model", "Current Password": "Bieżące hasło", "Custom": "Niestandardowy", @@ -151,6 +158,7 @@ "Delete All Chats": "Usuń wszystkie czaty", "Delete chat": "Usuń czat", "Delete Chat": "Usuń czat", + "Delete chat?": "", "delete this link": "usuń ten link", "Delete User": "Usuń użytkownika", "Deleted {{deleteModelTag}}": "Usunięto {{deleteModelTag}}", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "Eksportuj czaty", "Export Documents Mapping": "Eksportuj mapowanie dokumentów", + "Export Functions": "", "Export Models": "Eksportuj modele", "Export Prompts": "Eksportuj prompty", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "Luty", "Feel free to add specific details": "Podaj inne szczegóły", + "File": "", "File Mode": "Tryb pliku", "File not found.": "Plik nie został znaleziony.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Wykryto podszywanie się pod odcisk palca: Nie można używać inicjałów jako awatara. Przechodzenie do domyślnego obrazu profilowego.", "Fluidly stream large external response chunks": "Płynnie przesyłaj strumieniowo duże fragmenty odpowiedzi zewnętrznych", "Focus chat input": "Skoncentruj na czacie", "Followed instructions perfectly": "Postępował z idealnie według instrukcji", + "Form": "", "Format your variables using square brackets like this:": "Formatuj swoje zmienne, używając nawiasów kwadratowych, np.", "Frequency Penalty": "Kara za częstotliwość", + "Functions": "", "General": "Ogólne", "General Settings": "Ogólne ustawienia", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Witaj, {{name}}", "Help": "Pomoc", "Hide": "Ukryj", + "Hide Model": "", "How can I help you today?": "Jak mogę Ci dzisiaj pomóc?", "Hybrid Search": "Szukanie hybrydowe", "Image Generation (Experimental)": "Generowanie obrazu (eksperymentalne)", @@ -262,6 +276,7 @@ "Images": "Obrazy", "Import Chats": "Importuj czaty", "Import Documents Mapping": "Importuj mapowanie dokumentów", + "Import Functions": "", "Import Models": "Importowanie modeli", "Import Prompts": "Importuj prompty", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "W poleceniu dozwolone są tylko znaki alfanumeryczne i myślniki.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Ups! Trzymaj się! Twoje pliki są wciąż w procesie obróbki. Gotujemy je do perfekcji. Prosimy o cierpliwość, poinformujemy Cię, gdy będą gotowe.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Ups! Wygląda na to, że URL jest nieprawidłowy. Sprawdź jeszcze raz i spróbuj ponownie.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Ups! Używasz nieobsługiwanej metody (tylko interfejs front-end). Proszę obsłużyć interfejs WebUI z poziomu backendu.", "Open": "Otwórz", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "Zmiana rankingu modelu", "Reranking model disabled": "Zmiana rankingu modelu zablokowana", "Reranking model set to \"{{reranking_model}}\"": "Zmiana rankingu modelu ustawiona na \"{{reranking_model}}\"", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "Resetuj przechowywanie wektorów", "Response AutoCopy to Clipboard": "Automatyczne kopiowanie odpowiedzi do schowka", @@ -425,6 +442,7 @@ "Search a model": "Szukaj modelu", "Search Chats": "Szukaj w czatach", "Search Documents": "Szukaj dokumentów", + "Search Functions": "", "Search Models": "Szukaj modeli", "Search Prompts": "Szukaj promptów", "Search Query Generation Prompt": "", @@ -476,6 +494,7 @@ "short-summary": "Krótkie podsumowanie", "Show": "Pokaż", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Pokaż skróty", "Showcased creativity": "Pokaz kreatywności", "sidebar": "Panel boczny", @@ -497,6 +516,7 @@ "System": "System", "System Prompt": "Prompt systemowy", "Tags": "Tagi", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "Powiedz nam więcej", "Temperature": "Temperatura", @@ -508,9 +528,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Wynik powinien być wartością pomiędzy 0.0 (0%) a 1.0 (100%).", "Theme": "Motyw", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "To zapewnia, że Twoje cenne rozmowy są bezpiecznie zapisywane w bazie danych backendowej. Dziękujemy!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "To ustawienie nie synchronizuje się między przeglądarkami ani urządzeniami.", + "This will delete": "", "Thorough explanation": "Dokładne wyjaśnienie", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Porada: Aktualizuj wiele zmiennych kolejno, naciskając klawisz tabulatora w polu wprowadzania czatu po każdej zmianie.", "Title": "Tytuł", @@ -524,6 +546,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "do pola wprowadzania czatu.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Dzisiaj", "Toggle settings": "Przełącz ustawienia", @@ -539,10 +562,13 @@ "Type": "Typ", "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", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Uaktualnij i skopiuj link", "Update password": "Aktualizacja hasła", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "Prześlij model GGUF", "Upload Files": "Prześlij pliki", "Upload Pipeline": "", @@ -561,6 +587,7 @@ "variable": "zmienna", "variable to have them replaced with clipboard content.": "zmienna która zostanie zastąpiona zawartością schowka.", "Version": "Wersja", + "Voice": "", "Warning": "Ostrzeżenie", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Uwaga: Jeśli uaktualnisz lub zmienisz model osadzania, będziesz musiał ponownie zaimportować wszystkie dokumenty.", "Web": "Sieć", @@ -570,7 +597,6 @@ "Web Search": "Wyszukiwarka w Internecie", "Web Search Engine": "Wyszukiwarka internetowa", "Webhook URL": "URL webhook", - "WebUI Add-ons": "Dodatki do interfejsu WebUI", "WebUI Settings": "Ustawienia interfejsu WebUI", "WebUI will make requests to": "Interfejs sieciowy będzie wysyłał żądania do", "What’s New in": "Co nowego w", diff --git a/src/lib/i18n/locales/pt-BR/translation.json b/src/lib/i18n/locales/pt-BR/translation.json index a6004a3d49..69c386667e 100644 --- a/src/lib/i18n/locales/pt-BR/translation.json +++ b/src/lib/i18n/locales/pt-BR/translation.json @@ -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", @@ -81,6 +82,7 @@ "Capabilities": "Capacidades", "Change Password": "Alterar Senha", "Chat": "Bate-papo", + "Chat Background Image": "", "Chat Bubble UI": "UI de Bala de Bate-papo", "Chat direction": "Direção do Bate-papo", "Chat History": "Histórico de Bate-papo", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "Clique aqui para obter ajuda.", "Click here to": "Clique aqui para", + "Click here to download user import template file.": "", "Click here to select": "Clique aqui para selecionar", "Click here to select a csv file.": "Clique aqui para selecionar um arquivo csv.", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "A URL Base do ComfyUI é obrigatória.", "Command": "Comando", "Concurrent Requests": "Solicitações simultâneas", + "Confirm": "", "Confirm Password": "Confirmar Senha", + "Confirm your action": "", "Connections": "Conexões", "Contact Admin for WebUI Access": "", "Content": "Conteúdo", @@ -130,6 +135,8 @@ "Create new secret key": "Criar nova chave secreta", "Created at": "Criado em", "Created At": "Criado em", + "Created by": "", + "CSV Import": "", "Current Model": "Modelo Atual", "Current Password": "Senha Atual", "Custom": "Personalizado", @@ -151,6 +158,7 @@ "Delete All Chats": "Excluir todos os bate-papos", "Delete chat": "Excluir bate-papo", "Delete Chat": "Excluir Bate-papo", + "Delete chat?": "", "delete this link": "excluir este link", "Delete User": "Excluir Usuário", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} excluído", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "Exportar Bate-papos", "Export Documents Mapping": "Exportar Mapeamento de Documentos", + "Export Functions": "", "Export Models": "Modelos de Exportação", "Export Prompts": "Exportar Prompts", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "Fevereiro", "Feel free to add specific details": "Sinta-se à vontade para adicionar detalhes específicos", + "File": "", "File Mode": "Modo de Arquivo", "File not found.": "Arquivo não encontrado.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Impostação de impressão digital detectada: Não é possível usar iniciais como avatar. Padronizando para imagem de perfil padrão.", "Fluidly stream large external response chunks": "Transmita com fluidez grandes blocos de resposta externa", "Focus chat input": "Focar entrada de bate-papo", "Followed instructions perfectly": "Seguiu instruções perfeitamente", + "Form": "", "Format your variables using square brackets like this:": "Formate suas variáveis usando colchetes como este:", "Frequency Penalty": "Penalidade de Frequência", + "Functions": "", "General": "Geral", "General Settings": "Configurações Gerais", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Olá, {{name}}", "Help": "Ajuda", "Hide": "Ocultar", + "Hide Model": "", "How can I help you today?": "Como posso ajudá-lo hoje?", "Hybrid Search": "Pesquisa Híbrida", "Image Generation (Experimental)": "Geração de Imagens (Experimental)", @@ -262,6 +276,7 @@ "Images": "Imagens", "Import Chats": "Importar Bate-papos", "Import Documents Mapping": "Importar Mapeamento de Documentos", + "Import Functions": "", "Import Models": "Modelos de Importação", "Import Prompts": "Importar Prompts", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Somente caracteres alfanuméricos e hífens são permitidos na string de comando.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Opa! Aguente firme! Seus arquivos ainda estão no forno de processamento. Estamos cozinhando-os com perfeição. Por favor, seja paciente e avisaremos quando estiverem prontos.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Opa! Parece que a URL é inválida. Verifique novamente e tente outra vez.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Opa! Você está usando um método não suportado (somente frontend). Por favor, sirva o WebUI a partir do backend.", "Open": "Abrir", "Open AI": "OpenAI", @@ -406,6 +422,7 @@ "Reranking Model": "Modelo de Reranking", "Reranking model disabled": "Modelo de Reranking desativado", "Reranking model set to \"{{reranking_model}}\"": "Modelo de Reranking definido como \"{{reranking_model}}\"", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "Redefinir Armazenamento de Vetor", "Response AutoCopy to Clipboard": "Cópia Automática da Resposta para a Área de Transferência", @@ -425,6 +442,7 @@ "Search a model": "Pesquisar um modelo", "Search Chats": "Pesquisar bate-papos", "Search Documents": "Pesquisar Documentos", + "Search Functions": "", "Search Models": "Modelos de Pesquisa", "Search Prompts": "Pesquisar Prompts", "Search Query Generation Prompt": "", @@ -475,6 +493,7 @@ "short-summary": "resumo-curto", "Show": "Mostrar", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Mostrar", "Showcased creativity": "Criatividade Exibida", "sidebar": "barra lateral", @@ -496,6 +515,7 @@ "System": "Sistema", "System Prompt": "Prompt do Sistema", "Tags": "Tags", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "Dê-nos mais:", "Temperature": "Temperatura", @@ -507,9 +527,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "O score deve ser um valor entre 0.0 (0%) e 1.0 (100%).", "Theme": "Tema", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Isso garante que suas conversas valiosas sejam salvas com segurança em seu banco de dados de backend. Obrigado!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "Esta configuração não sincroniza entre navegadores ou dispositivos.", + "This will delete": "", "Thorough explanation": "Explicação Completa", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Dica: Atualize vários slots de variáveis consecutivamente pressionando a tecla Tab na entrada de bate-papo após cada substituição.", "Title": "Título", @@ -523,6 +545,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "para a entrada de bate-papo.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Hoje", "Toggle settings": "Alternar configurações", @@ -538,10 +561,13 @@ "Type": "Tipo", "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", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Atualizar e Copiar Link", "Update password": "Atualizar senha", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "Carregar um modelo GGUF", "Upload Files": "Carregar arquivos", "Upload Pipeline": "", @@ -560,6 +586,7 @@ "variable": "variável", "variable to have them replaced with clipboard content.": "variável para que sejam substituídos pelo conteúdo da área de transferência.", "Version": "Versão", + "Voice": "", "Warning": "Aviso", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Aviso: Se você atualizar ou alterar seu modelo de incorporação, você precisará reimportar todos os documentos.", "Web": "Web", @@ -569,7 +596,6 @@ "Web Search": "Pesquisa na Web", "Web Search Engine": "Mecanismo de Busca na Web", "Webhook URL": "URL do Webhook", - "WebUI Add-ons": "Complementos WebUI", "WebUI Settings": "Configurações WebUI", "WebUI will make requests to": "WebUI fará solicitações para", "What’s New in": "O que há de novo em", diff --git a/src/lib/i18n/locales/pt-PT/translation.json b/src/lib/i18n/locales/pt-PT/translation.json index 4face1dcb7..f0fd21a5a8 100644 --- a/src/lib/i18n/locales/pt-PT/translation.json +++ b/src/lib/i18n/locales/pt-PT/translation.json @@ -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", @@ -81,6 +82,7 @@ "Capabilities": "Capacidades", "Change Password": "Alterar Senha", "Chat": "Conversa", + "Chat Background Image": "", "Chat Bubble UI": "Bolha UI da Conversa", "Chat direction": "Direção da Conversa", "Chat History": "Histórico da Conversa", @@ -97,6 +99,7 @@ "Clear memory": "Limpar memória", "Click here for help.": "Clique aqui para obter ajuda.", "Click here to": "Clique aqui para", + "Click here to download user import template file.": "", "Click here to select": "Clique aqui para selecionar", "Click here to select a csv file.": "Clique aqui para selecionar um ficheiro csv.", "Click here to select a py file.": "Clique aqui para selecionar um ficheiro py", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "O URL Base do ComfyUI é obrigatório.", "Command": "Comando", "Concurrent Requests": "Solicitações simultâneas", + "Confirm": "", "Confirm Password": "Confirmar Senha", + "Confirm your action": "", "Connections": "Conexões", "Contact Admin for WebUI Access": "Contatar Admin para acesso ao WebUI", "Content": "Conteúdo", @@ -130,6 +135,8 @@ "Create new secret key": "Criar nova chave secreta", "Created at": "Criado em", "Created At": "Criado em", + "Created by": "", + "CSV Import": "", "Current Model": "Modelo Atual", "Current Password": "Senha Atual", "Custom": "Personalizado", @@ -151,6 +158,7 @@ "Delete All Chats": "Apagar todas as conversas", "Delete chat": "Apagar conversa", "Delete Chat": "Apagar Conversa", + "Delete chat?": "", "delete this link": "apagar este link", "Delete User": "Apagar Utilizador", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} apagado", @@ -224,6 +232,7 @@ "Export chat (.json)": "Exportar Conversa (.json)", "Export Chats": "Exportar Conversas", "Export Documents Mapping": "Exportar Mapeamento de Documentos", + "Export Functions": "", "Export Models": "Modelos de Exportação", "Export Prompts": "Exportar Prompts", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "Falha ao atualizar as definições", "February": "Fevereiro", "Feel free to add specific details": "Sinta-se à vontade para adicionar detalhes específicos", + "File": "", "File Mode": "Modo de Ficheiro", "File not found.": "Ficheiro não encontrado.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Detectada falsificação da impressão digital: Não é possível usar iniciais como avatar. A usar a imagem de perfil padrão.", "Fluidly stream large external response chunks": "Transmita com fluidez grandes blocos de resposta externa", "Focus chat input": "Focar na conversa", "Followed instructions perfectly": "Seguiu instruções perfeitamente", + "Form": "", "Format your variables using square brackets like this:": "Formate as suas variáveis usando parenteses rectos como este:", "Frequency Penalty": "Penalidade de Frequência", + "Functions": "", "General": "Geral", "General Settings": "Configurações Gerais", "Generate Image": "Gerar imagem", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Olá, {{name}}", "Help": "Ajuda", "Hide": "Ocultar", + "Hide Model": "", "How can I help you today?": "Como posso ajudá-lo hoje?", "Hybrid Search": "Pesquisa Híbrida", "Image Generation (Experimental)": "Geração de Imagens (Experimental)", @@ -262,6 +276,7 @@ "Images": "Imagens", "Import Chats": "Importar Conversas", "Import Documents Mapping": "Importar Mapeamento de Documentos", + "Import Functions": "", "Import Models": "Importar Modelos", "Import Prompts": "Importar Prompts", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Apenas caracteres alfanuméricos e hífens são permitidos na string de comando.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Epá! Segura-te! Os teus ficheiros ainda estão no forno de processamento. Estamos a cozinhá-los com perfeição. Por favor, seja paciente e avisaremos quando estiverem prontos.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Epá! Parece que o URL é inválido. Verifique novamente e tente outra vez.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Epá! Você está a usar um método não suportado (somente frontend). Por favor, sirva o WebUI a partir do backend.", "Open": "Abrir", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "Modelo de Reranking", "Reranking model disabled": "Modelo de Reranking desativado", "Reranking model set to \"{{reranking_model}}\"": "Modelo de Reranking definido como \"{{reranking_model}}\"", + "Reset": "", "Reset Upload Directory": "Limpar Pasta de Carregamento", "Reset Vector Storage": "Redefinir Armazenamento de Vetor", "Response AutoCopy to Clipboard": "Cópia Automática da Resposta para a Área de Transferência", @@ -425,6 +442,7 @@ "Search a model": "Pesquisar um modelo", "Search Chats": "Pesquisar Conversas", "Search Documents": "Pesquisar Documentos", + "Search Functions": "", "Search Models": "Modelos de pesquisa", "Search Prompts": "Pesquisar Prompts", "Search Query Generation Prompt": "Prompt de geração de consulta de pesquisa", @@ -475,6 +493,7 @@ "short-summary": "resumo-curto", "Show": "Mostrar", "Show Admin Details in Account Pending Overlay": "Mostrar Detalhes do Administrador na sobreposição de Conta Pendente", + "Show Model": "", "Show shortcuts": "Mostrar atalhos", "Showcased creativity": "Criatividade Exibida", "sidebar": "barra lateral", @@ -496,6 +515,7 @@ "System": "Sistema", "System Prompt": "Prompt do Sistema", "Tags": "Etiquetas", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "Diga-nos mais:", "Temperature": "Temperatura", @@ -507,9 +527,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "A pontuação deve ser um valor entre 0.0 (0%) e 1.0 (100%).", "Theme": "Tema", "Thinking...": "A pensar...", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Isto garante que suas conversas valiosas sejam guardadas com segurança na sua base de dados de backend. Obrigado!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "Isto é um recurso experimental, pode não funcionar conforme o esperado e está sujeito a alterações a qualquer momento.", "This setting does not sync across browsers or devices.": "Esta configuração não sincroniza entre navegadores ou dispositivos.", + "This will delete": "", "Thorough explanation": "Explicação Minuciosa", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Dica: Atualize vários slots de variáveis consecutivamente pressionando a tecla Tab na entrada da conversa após cada substituição.", "Title": "Título", @@ -523,6 +545,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Para aceder ao WebUI, entre em contato com o administrador. Os administradores podem gerir o status dos utilizadores no Painel de Administração.", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "para a entrada da conversa.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Hoje", "Toggle settings": "Alternar configurações", @@ -538,10 +561,13 @@ "Type": "Tipo", "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", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Atualizar e Copiar Link", "Update password": "Atualizar senha", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "Carregar um modelo GGUF", "Upload Files": "Carregar ficheiros", "Upload Pipeline": "Carregar Pipeline", @@ -560,6 +586,7 @@ "variable": "variável", "variable to have them replaced with clipboard content.": "variável para que sejam substituídos pelo conteúdo da área de transferência.", "Version": "Versão", + "Voice": "", "Warning": "Aviso", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Aviso: Se você atualizar ou alterar o seu modelo de vetorização, você tem de reimportar todos os documentos.", "Web": "Web", @@ -569,7 +596,6 @@ "Web Search": "Pesquisa na Web", "Web Search Engine": "Motor de Pesquisa Web", "Webhook URL": "URL do Webhook", - "WebUI Add-ons": "Complementos WebUI", "WebUI Settings": "Configurações WebUI", "WebUI will make requests to": "WebUI fará pedidos a", "What’s New in": "O que há de novo em", diff --git a/src/lib/i18n/locales/ru-RU/translation.json b/src/lib/i18n/locales/ru-RU/translation.json index 82b2879b3b..1b836fb202 100644 --- a/src/lib/i18n/locales/ru-RU/translation.json +++ b/src/lib/i18n/locales/ru-RU/translation.json @@ -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": "ассистент", @@ -81,6 +82,7 @@ "Capabilities": "Возможности", "Change Password": "Изменить пароль", "Chat": "Чат", + "Chat Background Image": "", "Chat Bubble UI": "Bubble UI чат", "Chat direction": "Направление чат", "Chat History": "История чат", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "Нажмите здесь для помощи.", "Click here to": "Нажмите здесь чтобы", + "Click here to download user import template file.": "", "Click here to select": "Нажмите тут чтобы выберите", "Click here to select a csv file.": "Нажмите здесь чтобы выбрать файл csv.", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "ComfyUI Необходима базовый адрес URL.", "Command": "Команда", "Concurrent Requests": "Одновременные запросы", + "Confirm": "", "Confirm Password": "Подтвердите пароль", + "Confirm your action": "", "Connections": "Соединение", "Contact Admin for WebUI Access": "", "Content": "Содержание", @@ -130,6 +135,8 @@ "Create new secret key": "Создать новый секретный ключ", "Created at": "Создано в", "Created At": "Создано в", + "Created by": "", + "CSV Import": "", "Current Model": "Текущая модель", "Current Password": "Текущий пароль", "Custom": "Пользовательский", @@ -151,6 +158,7 @@ "Delete All Chats": "Удалить все чаты", "Delete chat": "Удалить чат", "Delete Chat": "Удалить чат", + "Delete chat?": "", "delete this link": "удалить эту ссылку", "Delete User": "Удалить пользователя", "Deleted {{deleteModelTag}}": "Удалено {{deleteModelTag}}", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "Экспортировать чаты", "Export Documents Mapping": "Экспортировать отображение документов", + "Export Functions": "", "Export Models": "Экспорт моделей", "Export Prompts": "Экспортировать промты", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "Февраль", "Feel free to add specific details": "Feel free to add specific details", + "File": "", "File Mode": "Режим файла", "File not found.": "Файл не найден.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Определение подделки отпечатка: Невозможно использовать инициалы в качестве аватара. По умолчанию используется изображение профиля по умолчанию.", "Fluidly stream large external response chunks": "Плавная потоковая передача больших фрагментов внешних ответов", "Focus chat input": "Фокус ввода чата", "Followed instructions perfectly": "Учитывая инструкции идеально", + "Form": "", "Format your variables using square brackets like this:": "Форматируйте ваши переменные, используя квадратные скобки, как здесь:", "Frequency Penalty": "Штраф за частоту", + "Functions": "", "General": "Общее", "General Settings": "Общие настройки", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Привет, {{name}}", "Help": "Помощь", "Hide": "Скрыть", + "Hide Model": "", "How can I help you today?": "Чем я могу помочь вам сегодня?", "Hybrid Search": "Гибридная поисковая система", "Image Generation (Experimental)": "Генерация изображений (Экспериментально)", @@ -262,6 +276,7 @@ "Images": "Изображения", "Import Chats": "Импорт чатов", "Import Documents Mapping": "Импорт сопоставления документов", + "Import Functions": "", "Import Models": "Импорт моделей", "Import Prompts": "Импорт подсказок", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "В строке команды разрешено использовать только буквенно-цифровые символы и дефисы.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Упс! Зажмите пояса! Ваши файлы все еще в процессе обработки. Мы готовим их до идеального состояния. Пожалуйста, будьте терпеливы, и мы сообщим вам, когда они будут готовы.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Упс! Похоже, что URL-адрес недействителен. Пожалуйста, перепроверьте и попробуйте еще раз.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Упс! Вы используете неподдерживаемый метод (только фронтенд). Пожалуйста, обслуживайте веб-интерфейс из бэкенда.", "Open": "Открыть", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "Reranking модель", "Reranking model disabled": "Модель реранжирования отключена", "Reranking model set to \"{{reranking_model}}\"": "Модель реранжирования установлена на \"{{reranking_model}}\"", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "Сбросить векторное хранилище", "Response AutoCopy to Clipboard": "Автоматическое копирование ответа в буфер обмена", @@ -425,6 +442,7 @@ "Search a model": "Поиск модели", "Search Chats": "Поиск в чатах", "Search Documents": "Поиск документов", + "Search Functions": "", "Search Models": "Поиск моделей", "Search Prompts": "Поиск промтов", "Search Query Generation Prompt": "", @@ -476,6 +494,7 @@ "short-summary": "краткое описание", "Show": "Показать", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Показать клавиатурные сокращения", "Showcased creativity": "Показать творчество", "sidebar": "боковая панель", @@ -497,6 +516,7 @@ "System": "Система", "System Prompt": "Системный промпт", "Tags": "Теги", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "Пожалуйста, расскажите нам больше:", "Temperature": "Температура", @@ -508,9 +528,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Оценка должна быть значением между 0,0 (0%) и 1,0 (100%).", "Theme": "Тема", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Это обеспечивает сохранение ваших ценных разговоров в безопасной базе данных на вашем сервере. Спасибо!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "Эта настройка не синхронизируется между браузерами или устройствами.", + "This will delete": "", "Thorough explanation": "Повнимательнее", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Совет: Обновляйте несколько переменных подряд, нажимая клавишу Tab в поле ввода чата после каждой замены.", "Title": "Заголовок", @@ -524,6 +546,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "в чате.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Сегодня", "Toggle settings": "Переключить настройки", @@ -539,10 +562,13 @@ "Type": "Тип", "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}}', но принимается и обрабатывается как обычный текст", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Обновить и скопировать ссылку", "Update password": "Обновить пароль", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "Загрузить модель GGUF", "Upload Files": "Загрузка файлов", "Upload Pipeline": "", @@ -561,6 +587,7 @@ "variable": "переменная", "variable to have them replaced with clipboard content.": "переменная, чтобы их заменить содержимым буфера обмена.", "Version": "Версия", + "Voice": "", "Warning": "Предупреждение", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Предупреждение: Если вы обновите или измените модель эмбеддинга, вам нужно будет повторно импортировать все документы.", "Web": "Веб", @@ -570,7 +597,6 @@ "Web Search": "Веб-поиск", "Web Search Engine": "Поисковая система", "Webhook URL": "URL-адрес веб-хука", - "WebUI Add-ons": "Дополнения для WebUI", "WebUI Settings": "Настройки WebUI", "WebUI will make requests to": "WebUI будет отправлять запросы на", "What’s New in": "Что нового в", diff --git a/src/lib/i18n/locales/sr-RS/translation.json b/src/lib/i18n/locales/sr-RS/translation.json index 1f6cd0b61a..b6bc2b3c5a 100644 --- a/src/lib/i18n/locales/sr-RS/translation.json +++ b/src/lib/i18n/locales/sr-RS/translation.json @@ -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": "помоћник", @@ -81,6 +82,7 @@ "Capabilities": "Могућности", "Change Password": "Промени лозинку", "Chat": "Ћаскање", + "Chat Background Image": "", "Chat Bubble UI": "Интерфејс балона ћаскања", "Chat direction": "Смер ћаскања", "Chat History": "Историја ћаскања", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "Кликните овде за помоћ.", "Click here to": "Кликните овде да", + "Click here to download user import template file.": "", "Click here to select": "Кликните овде да изаберете", "Click here to select a csv file.": "Кликните овде да изаберете csv датотеку.", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "Потребна је основна адреса за ComfyUI.", "Command": "Наредба", "Concurrent Requests": "Упоредни захтеви", + "Confirm": "", "Confirm Password": "Потврди лозинку", + "Confirm your action": "", "Connections": "Везе", "Contact Admin for WebUI Access": "", "Content": "Садржај", @@ -130,6 +135,8 @@ "Create new secret key": "Направи нови тајни кључ", "Created at": "Направљено у", "Created At": "Направљено у", + "Created by": "", + "CSV Import": "", "Current Model": "Тренутни модел", "Current Password": "Тренутна лозинка", "Custom": "Прилагођено", @@ -151,6 +158,7 @@ "Delete All Chats": "Избриши сва ћаскања", "Delete chat": "Обриши ћаскање", "Delete Chat": "Обриши ћаскање", + "Delete chat?": "", "delete this link": "обриши ову везу", "Delete User": "Обриши корисника", "Deleted {{deleteModelTag}}": "Обрисано {{deleteModelTag}}", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "Извези ћаскања", "Export Documents Mapping": "Извези мапирање докумената", + "Export Functions": "", "Export Models": "Извези моделе", "Export Prompts": "Извези упите", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "Фебруар", "Feel free to add specific details": "Слободно додајте специфичне детаље", + "File": "", "File Mode": "Режим датотеке", "File not found.": "Датотека није пронађена.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Откривено лажно представљање отиска прста: Немогуће је користити иницијале као аватар. Прелазак на подразумевану профилну слику.", "Fluidly stream large external response chunks": "Течно стримујте велике спољне делове одговора", "Focus chat input": "Усредсредите унос ћаскања", "Followed instructions perfectly": "Упутства су савршено праћена", + "Form": "", "Format your variables using square brackets like this:": "Форматирајте ваше променљиве користећи угластe заграде овако:", "Frequency Penalty": "Фреквентна казна", + "Functions": "", "General": "Опште", "General Settings": "Општа подешавања", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Здраво, {{name}}", "Help": "Помоћ", "Hide": "Сакриј", + "Hide Model": "", "How can I help you today?": "Како могу да вам помогнем данас?", "Hybrid Search": "Хибридна претрага", "Image Generation (Experimental)": "Стварање слика (експериментално)", @@ -262,6 +276,7 @@ "Images": "Слике", "Import Chats": "Увези ћаскања", "Import Documents Mapping": "Увези мапирање докумената", + "Import Functions": "", "Import Models": "Увези моделе", "Import Prompts": "Увези упите", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Само алфанумерички знакови и цртице су дозвољени у низу наредби.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Упс! Само тренутак! Ваше датотеке се још обрађују. Припремамо их до савршенства. Молимо вас за стрпљење и обавестићемо вас када буду спремне.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Упс! Изгледа да је адреса неважећа. Молимо вас да проверите и покушате поново.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Упс! Користите неподржани метод (само фронтенд). Молимо вас да покренете WebUI са бекенда.", "Open": "Отвори", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "Модел поновног рангирања", "Reranking model disabled": "Модел поновног рангирања онемогућен", "Reranking model set to \"{{reranking_model}}\"": "Модел поновног рангирања подешен на \"{{reranking_model}}\"", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "Ресетуј складиште вектора", "Response AutoCopy to Clipboard": "Самостално копирање одговора у оставу", @@ -425,6 +442,7 @@ "Search a model": "Претражи модел", "Search Chats": "Претражи ћаскања", "Search Documents": "Претражи документе", + "Search Functions": "", "Search Models": "Модели претраге", "Search Prompts": "Претражи упите", "Search Query Generation Prompt": "", @@ -475,6 +493,7 @@ "short-summary": "кратак сажетак", "Show": "Прикажи", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Прикажи пречице", "Showcased creativity": "Приказана креативност", "sidebar": "бочна трака", @@ -496,6 +515,7 @@ "System": "Систем", "System Prompt": "Системски упит", "Tags": "Ознаке", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "Реците нам више:", "Temperature": "Температура", @@ -507,9 +527,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Резултат треба да буде вредност између 0.0 (0%) и 1.0 (100%).", "Theme": "Тема", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Ово осигурава да су ваши вредни разговори безбедно сачувани у вашој бекенд бази података. Хвала вам!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "Ово подешавање се не усклађује преко прегледача или уређаја.", + "This will delete": "", "Thorough explanation": "Детаљно објашњење", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Савет: ажурирајте више променљивих слотова узастопно притиском на тастер Таб у уносу ћаскања након сваке замене.", "Title": "Наслов", @@ -523,6 +545,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "у унос ћаскања.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Данас", "Toggle settings": "Пребаци подешавања", @@ -538,10 +561,13 @@ "Type": "Тип", "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}}', али прихваћен и третиран као обичан текст", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Ажурирај и копирај везу", "Update password": "Ажурирај лозинку", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "Отпреми GGUF модел", "Upload Files": "Отпремање датотека", "Upload Pipeline": "", @@ -560,6 +586,7 @@ "variable": "променљива", "variable to have them replaced with clipboard content.": "променљива за замену са садржајем оставе.", "Version": "Издање", + "Voice": "", "Warning": "Упозорење", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Упозорење: ако ажурирате или промените ваш модел уградње, мораћете поново да увезете све документе.", "Web": "Веб", @@ -569,7 +596,6 @@ "Web Search": "Wеб претрага", "Web Search Engine": "Wеб претраживач", "Webhook URL": "Адреса веб-куке", - "WebUI Add-ons": "Додаци веб интерфејса", "WebUI Settings": "Подешавања веб интерфејса", "WebUI will make requests to": "Веб интерфејс ће слати захтеве на", "What’s New in": "Шта је ново у", diff --git a/src/lib/i18n/locales/sv-SE/translation.json b/src/lib/i18n/locales/sv-SE/translation.json index cb271f1ec7..fb65f5ac01 100644 --- a/src/lib/i18n/locales/sv-SE/translation.json +++ b/src/lib/i18n/locales/sv-SE/translation.json @@ -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", @@ -81,6 +82,7 @@ "Capabilities": "Kapaciteter", "Change Password": "Ändra lösenord", "Chat": "Chatt", + "Chat Background Image": "", "Chat Bubble UI": "Chatbubblar UI", "Chat direction": "Chattriktning", "Chat History": "Chatthistorik", @@ -97,6 +99,7 @@ "Clear memory": "Rensa minnet", "Click here for help.": "Klicka här för hjälp.", "Click here to": "Klicka här för att", + "Click here to download user import template file.": "", "Click here to select": "Klicka här för att välja", "Click here to select a csv file.": "Klicka här för att välja en csv-fil.", "Click here to select a py file.": "Klicka här för att välja en python-fil.", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "ComfyUI Base URL krävs.", "Command": "Kommando", "Concurrent Requests": "Parallella anrop", + "Confirm": "", "Confirm Password": "Bekräfta lösenord", + "Confirm your action": "", "Connections": "Anslutningar", "Contact Admin for WebUI Access": "Kontakta administratören för att få åtkomst till WebUI", "Content": "Innehåll", @@ -130,6 +135,8 @@ "Create new secret key": "Skapa ny hemlig nyckel", "Created at": "Skapad", "Created At": "Skapad", + "Created by": "", + "CSV Import": "", "Current Model": "Aktuell modell", "Current Password": "Nuvarande lösenord", "Custom": "Anpassad", @@ -151,6 +158,7 @@ "Delete All Chats": "Ta bort alla chattar", "Delete chat": "Radera chatt", "Delete Chat": "Radera chatt", + "Delete chat?": "", "delete this link": "radera denna länk", "Delete User": "Radera användare", "Deleted {{deleteModelTag}}": "Raderad {{deleteModelTag}}", @@ -224,6 +232,7 @@ "Export chat (.json)": "Exportera chatt (.json)", "Export Chats": "Exportera chattar", "Export Documents Mapping": "Exportera dokumentmappning", + "Export Functions": "", "Export Models": "Exportera modeller", "Export Prompts": "Exportera instruktioner", "Export Tools": "Exportera verktyg", @@ -233,14 +242,18 @@ "Failed to update settings": "Misslyckades med att uppdatera inställningarna", "February": "februari", "Feel free to add specific details": "Tveka inte att lägga till specifika detaljer", + "File": "", "File Mode": "Fil-läge", "File not found.": "Fil hittades inte.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Fingeravtrycksmanipulering upptäckt: Kan inte använda initialer som avatar. Återställning till standardprofilbild.", "Fluidly stream large external response chunks": "Strömma flytande stora externa svarschunks", "Focus chat input": "Fokusera på chattfältet", "Followed instructions perfectly": "Följde instruktionerna perfekt", + "Form": "", "Format your variables using square brackets like this:": "Formatera dina variabler med hakparenteser så här:", "Frequency Penalty": "Straff för frekvens", + "Functions": "", "General": "Allmän", "General Settings": "Allmänna inställningar", "Generate Image": "Generera bild", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Hej, {{name}}", "Help": "Hjälp", "Hide": "Dölj", + "Hide Model": "", "How can I help you today?": "Hur kan jag hjälpa dig idag?", "Hybrid Search": "Hybrid sökning", "Image Generation (Experimental)": "Bildgenerering (experimentell)", @@ -262,6 +276,7 @@ "Images": "Bilder", "Import Chats": "Importera chattar", "Import Documents Mapping": "Importera dokumentmappning", + "Import Functions": "", "Import Models": "Importera modeller", "Import Prompts": "Importera instruktioner", "Import Tools": "Importera verktyg", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Endast alfanumeriska tecken och bindestreck är tillåtna i kommandosträngen.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Hoppsan! Håll i dig! Dina filer är fortfarande i bearbetningsugnen. Vi lagar dem till perfektion. Var tålmodig så meddelar vi dig när de är redo.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Hoppsan! Det ser ut som om URL:en är ogiltig. Dubbelkolla gärna och försök igen.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Hoppsan! Du använder en ej stödd metod (endast frontend). Vänligen servera WebUI från backend.", "Open": "Öppna", "Open AI": "Öppna AI", @@ -406,6 +422,7 @@ "Reranking Model": "Reranking modell", "Reranking model disabled": "Reranking modell inaktiverad", "Reranking model set to \"{{reranking_model}}\"": "Reranking modell inställd på \"{{reranking_model}}\"", + "Reset": "", "Reset Upload Directory": "Återställ uppladdningskatalog", "Reset Vector Storage": "Återställ vektorlager", "Response AutoCopy to Clipboard": "Svara AutoCopy till urklipp", @@ -425,6 +442,7 @@ "Search a model": "Sök efter en modell", "Search Chats": "Sök i chattar", "Search Documents": "Sök dokument", + "Search Functions": "", "Search Models": "Sök modeller", "Search Prompts": "Sök instruktioner", "Search Query Generation Prompt": "Instruktion för generering av sökfrågor", @@ -474,6 +492,7 @@ "short-summary": "kort sammanfattning", "Show": "Visa", "Show Admin Details in Account Pending Overlay": "Visa administratörsinformation till väntande konton", + "Show Model": "", "Show shortcuts": "Visa genvägar", "Showcased creativity": "Visade kreativitet", "sidebar": "sidofält", @@ -495,6 +514,7 @@ "System": "System", "System Prompt": "Systeminstruktion", "Tags": "Taggar", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "Berätta mer:", "Temperature": "Temperatur", @@ -506,9 +526,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Betyget ska vara ett värde mellan 0.0 (0%) och 1.0 (100%).", "Theme": "Tema", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Detta säkerställer att dina värdefulla samtal sparas säkert till din backend-databas. Tack!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "Detta är en experimentell funktion som kanske inte fungerar som förväntat och som kan komma att ändras när som helst.", "This setting does not sync across browsers or devices.": "Denna inställning synkroniseras inte mellan webbläsare eller enheter.", + "This will delete": "", "Thorough explanation": "Djupare förklaring", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Tips: Uppdatera fler variabler genom att trycka på tabb-tangenten i chattinmatningen efter varje ersättning.", "Title": "Titel", @@ -522,6 +544,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "För att få tillgång till WebUI, kontakta administratören. Administratörer kan hantera behörigheter från administrationspanelen.", "To add documents here, upload them to the \"Documents\" workspace first.": "Om du vill lägga till dokument här ska du först ladda upp dem till arbetsytan \"Dokument\".", "to chat input.": "till chattinmatning.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "Om du vill välja verktygslådor här måste du först lägga till dem i arbetsytan \"Verktyg\".", "Today": "Idag", "Toggle settings": "Växla inställningar", @@ -537,10 +560,13 @@ "Type": "Typ", "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", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Uppdatera och kopiera länk", "Update password": "Uppdatera lösenord", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "Ladda upp en GGUF-modell", "Upload Files": "Ladda upp filer", "Upload Pipeline": "Ladda upp rörledning", @@ -559,6 +585,7 @@ "variable": "variabel", "variable to have them replaced with clipboard content.": "variabel för att få dem ersatta med urklippsinnehåll.", "Version": "Version", + "Voice": "", "Warning": "Varning", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Varning: Om du uppdaterar eller ändrar din embedding modell måste du importera alla dokument igen.", "Web": "Webb", @@ -568,7 +595,6 @@ "Web Search": "Webbsökning", "Web Search Engine": "Webbsökmotor", "Webhook URL": "Webhook-URL", - "WebUI Add-ons": "WebUI-tillägg", "WebUI Settings": "WebUI-inställningar", "WebUI will make requests to": "WebUI kommer att skicka förfrågningar till", "What’s New in": "Vad är nytt i", diff --git a/src/lib/i18n/locales/tk-TW/translation.json b/src/lib/i18n/locales/tk-TW/translation.json index 47f474b4a9..24de0b8ccd 100644 --- a/src/lib/i18n/locales/tk-TW/translation.json +++ b/src/lib/i18n/locales/tk-TW/translation.json @@ -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": "", @@ -81,6 +82,7 @@ "Capabilities": "", "Change Password": "", "Chat": "", + "Chat Background Image": "", "Chat Bubble UI": "", "Chat direction": "", "Chat History": "", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "", "Click here to": "", + "Click here to download user import template file.": "", "Click here to select": "", "Click here to select a csv file.": "", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "", "Command": "", "Concurrent Requests": "", + "Confirm": "", "Confirm Password": "", + "Confirm your action": "", "Connections": "", "Contact Admin for WebUI Access": "", "Content": "", @@ -130,6 +135,8 @@ "Create new secret key": "", "Created at": "", "Created At": "", + "Created by": "", + "CSV Import": "", "Current Model": "", "Current Password": "", "Custom": "", @@ -151,6 +158,7 @@ "Delete All Chats": "", "Delete chat": "", "Delete Chat": "", + "Delete chat?": "", "delete this link": "", "Delete User": "", "Deleted {{deleteModelTag}}": "", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "", "Export Documents Mapping": "", + "Export Functions": "", "Export Models": "", "Export Prompts": "", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "", "Feel free to add specific details": "", + "File": "", "File Mode": "", "File not found.": "", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "", "Fluidly stream large external response chunks": "", "Focus chat input": "", "Followed instructions perfectly": "", + "Form": "", "Format your variables using square brackets like this:": "", "Frequency Penalty": "", + "Functions": "", "General": "", "General Settings": "", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "", "Help": "", "Hide": "", + "Hide Model": "", "How can I help you today?": "", "Hybrid Search": "", "Image Generation (Experimental)": "", @@ -262,6 +276,7 @@ "Images": "", "Import Chats": "", "Import Documents Mapping": "", + "Import Functions": "", "Import Models": "", "Import Prompts": "", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "", "Oops! Looks like the URL is invalid. Please double-check and try again.": "", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "", "Open": "", "Open AI": "", @@ -406,6 +422,7 @@ "Reranking Model": "", "Reranking model disabled": "", "Reranking model set to \"{{reranking_model}}\"": "", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "", "Response AutoCopy to Clipboard": "", @@ -425,6 +442,7 @@ "Search a model": "", "Search Chats": "", "Search Documents": "", + "Search Functions": "", "Search Models": "", "Search Prompts": "", "Search Query Generation Prompt": "", @@ -474,6 +492,7 @@ "short-summary": "", "Show": "", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "", "Showcased creativity": "", "sidebar": "", @@ -495,6 +514,7 @@ "System": "", "System Prompt": "", "Tags": "", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "", "Temperature": "", @@ -506,9 +526,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "", "Theme": "", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "", + "This will delete": "", "Thorough explanation": "", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "", "Title": "", @@ -522,6 +544,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "", "Toggle settings": "", @@ -537,10 +560,13 @@ "Type": "", "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": "", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "", "Update password": "", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "", "Upload Files": "", "Upload Pipeline": "", @@ -559,6 +585,7 @@ "variable": "", "variable to have them replaced with clipboard content.": "", "Version": "", + "Voice": "", "Warning": "", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "", "Web": "", @@ -568,7 +595,6 @@ "Web Search": "", "Web Search Engine": "", "Webhook URL": "", - "WebUI Add-ons": "", "WebUI Settings": "", "WebUI will make requests to": "", "What’s New in": "", diff --git a/src/lib/i18n/locales/tr-TR/translation.json b/src/lib/i18n/locales/tr-TR/translation.json index 0f064fbe36..424578d11d 100644 --- a/src/lib/i18n/locales/tr-TR/translation.json +++ b/src/lib/i18n/locales/tr-TR/translation.json @@ -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", @@ -81,6 +82,7 @@ "Capabilities": "Yetenekler", "Change Password": "Parola Değiştir", "Chat": "Sohbet", + "Chat Background Image": "", "Chat Bubble UI": "Sohbet Balonu UI", "Chat direction": "Sohbet Yönü", "Chat History": "Sohbet Geçmişi", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "Yardım için buraya tıklayın.", "Click here to": "Şunu yapmak için buraya tıklayın:", + "Click here to download user import template file.": "", "Click here to select": "Seçmek için buraya tıklayın", "Click here to select a csv file.": "Bir CSV dosyası seçmek için buraya tıklayın.", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "ComfyUI Temel URL gerekli.", "Command": "Komut", "Concurrent Requests": "Eşzamanlı İstekler", + "Confirm": "", "Confirm Password": "Parolayı Onayla", + "Confirm your action": "", "Connections": "Bağlantılar", "Contact Admin for WebUI Access": "", "Content": "İçerik", @@ -130,6 +135,8 @@ "Create new secret key": "Yeni gizli anahtar oluştur", "Created at": "Oluşturulma tarihi", "Created At": "Şu Tarihte Oluşturuldu:", + "Created by": "", + "CSV Import": "", "Current Model": "Mevcut Model", "Current Password": "Mevcut Parola", "Custom": "Özel", @@ -151,6 +158,7 @@ "Delete All Chats": "Tüm Sohbetleri Sil", "Delete chat": "Sohbeti sil", "Delete Chat": "Sohbeti Sil", + "Delete chat?": "", "delete this link": "bu bağlantıyı sil", "Delete User": "Kullanıcıyı Sil", "Deleted {{deleteModelTag}}": "{{deleteModelTag}} silindi", @@ -224,6 +232,7 @@ "Export chat (.json)": "Sohbeti dışa aktar (.json)", "Export Chats": "Sohbetleri Dışa Aktar", "Export Documents Mapping": "Belge Eşlemesini Dışa Aktar", + "Export Functions": "", "Export Models": "Modelleri Dışa Aktar", "Export Prompts": "Promptları Dışa Aktar", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "Şubat", "Feel free to add specific details": "Spesifik ayrıntılar eklemekten çekinmeyin", + "File": "", "File Mode": "Dosya Modu", "File not found.": "Dosya bulunamadı.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Parmak izi sahteciliği tespit edildi: Avatar olarak baş harfler kullanılamıyor. Varsayılan profil resmine dönülüyor.", "Fluidly stream large external response chunks": "Büyük harici yanıt chunklarını akıcı bir şekilde yayınlayın", "Focus chat input": "Sohbet girişine odaklan", "Followed instructions perfectly": "Talimatları mükemmel şekilde takip etti", + "Form": "", "Format your variables using square brackets like this:": "Değişkenlerinizi şu şekilde kare parantezlerle biçimlendirin:", "Frequency Penalty": "Frekans Cezası", + "Functions": "", "General": "Genel", "General Settings": "Genel Ayarlar", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Merhaba, {{name}}", "Help": "Yardım", "Hide": "Gizle", + "Hide Model": "", "How can I help you today?": "Bugün size nasıl yardımcı olabilirim?", "Hybrid Search": "Karma Arama", "Image Generation (Experimental)": "Görüntü Oluşturma (Deneysel)", @@ -262,6 +276,7 @@ "Images": "Görüntüler", "Import Chats": "Sohbetleri İçe Aktar", "Import Documents Mapping": "Belge Eşlemesini İçe Aktar", + "Import Functions": "", "Import Models": "Modelleri İçe Aktar", "Import Prompts": "Promptları İçe Aktar", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Komut dizisinde yalnızca alfasayısal karakterler ve tireler kabul edilir.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Hop! Biraz sabırlı ol! Dosyaların hala hazırlama fırınında. Onları ağzınıza layık olana kadar pişiriyoruz :) Lütfen sabırlı olun; hazır olduklarında size haber vereceğiz.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Hop! URL geçersiz gibi görünüyor. Lütfen tekrar kontrol edin ve yeniden deneyin.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Hop! Desteklenmeyen bir yöntem kullanıyorsunuz (yalnızca önyüz). Lütfen WebUI'yi arkayüzden sunun.", "Open": "Aç", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "Yeniden Sıralama Modeli", "Reranking model disabled": "Yeniden sıralama modeli devre dışı bırakıldı", "Reranking model set to \"{{reranking_model}}\"": "Yeniden sıralama modeli \"{{reranking_model}}\" olarak ayarlandı", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "Vektör Depolamayı Sıfırla", "Response AutoCopy to Clipboard": "Yanıtı Panoya Otomatik Kopyala", @@ -425,6 +442,7 @@ "Search a model": "Bir model ara", "Search Chats": "Sohbetleri Ara", "Search Documents": "Belgeleri Ara", + "Search Functions": "", "Search Models": "Modelleri Ara", "Search Prompts": "Prompt Ara", "Search Query Generation Prompt": "", @@ -474,6 +492,7 @@ "short-summary": "kısa-özet", "Show": "Göster", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "Kısayolları göster", "Showcased creativity": "Sergilenen yaratıcılık", "sidebar": "kenar çubuğu", @@ -495,6 +514,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", @@ -506,9 +526,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Puan 0.0 (%0) ile 1.0 (%100) arasında bir değer olmalıdır.", "Theme": "Tema", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Bu, önemli konuşmalarınızın güvenli bir şekilde arkayüz veritabanınıza kaydedildiğini garantiler. Teşekkür ederiz!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "Bu ayar tarayıcılar veya cihazlar arasında senkronize edilmez.", + "This will delete": "", "Thorough explanation": "Kapsamlı açıklama", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "İpucu: Her değiştirmeden sonra sohbet girişinde tab tuşuna basarak birden fazla değişken yuvasını art arda güncelleyin.", "Title": "Başlık", @@ -522,6 +544,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "sohbet girişine.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Bugün", "Toggle settings": "Ayarları Aç/Kapat", @@ -537,10 +560,13 @@ "Type": "Tür", "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", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "Güncelle ve Bağlantıyı Kopyala", "Update password": "Parolayı Güncelle", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "Bir GGUF modeli yükle", "Upload Files": "Dosyaları Yükle", "Upload Pipeline": "", @@ -559,6 +585,7 @@ "variable": "değişken", "variable to have them replaced with clipboard content.": "panodaki içerikle değiştirilmesi için değişken.", "Version": "Sürüm", + "Voice": "", "Warning": "Uyarı", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Uyarı: Gömme modelinizi günceller veya değiştirirseniz, tüm belgeleri yeniden içe aktarmanız gerekecektir.", "Web": "Web", @@ -568,7 +595,6 @@ "Web Search": "Web Araması", "Web Search Engine": "Web Arama Motoru", "Webhook URL": "Webhook URL", - "WebUI Add-ons": "WebUI Eklentileri", "WebUI Settings": "WebUI Ayarları", "WebUI will make requests to": "WebUI, isteklerde bulunacak:", "What’s New in": "Yenilikler:", diff --git a/src/lib/i18n/locales/uk-UA/translation.json b/src/lib/i18n/locales/uk-UA/translation.json index 57b2c549ae..41006369d5 100644 --- a/src/lib/i18n/locales/uk-UA/translation.json +++ b/src/lib/i18n/locales/uk-UA/translation.json @@ -32,8 +32,8 @@ "admin": "адмін", "Admin": "Адмін", "Admin Panel": "Адмін-панель", - "Admin Settings": "Налаштування адміністратора", - "Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "", + "Admin Settings": "Адмін-панель", + "Admins have access to all tools at all times; users need tools assigned per model in the workspace.": "Адміністратори мають доступ до всіх інструментів у будь-який час; користувачам потрібні інструменти, призначені для кожної моделі в робочій області.", "Advanced Parameters": "Розширені параметри", "Advanced Params": "Розширені параметри", "all": "всі", @@ -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": "асистента", @@ -69,19 +70,20 @@ "Bad Response": "Неправильна відповідь", "Banners": "Прапори", "Base Model (From)": "Базова модель (від)", - "Batch Size (num_batch)": "", + "Batch Size (num_batch)": "Розмір партії (num_batch)", "before": "до того, як", "Being lazy": "Не поспішати", "Brave Search API Key": "Ключ API пошуку Brave", "Bypass SSL verification for Websites": "Обхід SSL-перевірки для веб-сайтів", "Call": "Виклик", "Call feature is not supported when using Web STT engine": "Функція виклику не підтримується при використанні Web STT (розпізнавання мовлення) рушія", - "Camera": "", + "Camera": "Камера", "Cancel": "Скасувати", "Capabilities": "Можливості", "Change Password": "Змінити пароль", "Chat": "Чат", - "Chat Bubble UI": "Бульбашковий UI чату", + "Chat Background Image": "Фонове зображення чату", + "Chat Bubble UI": "Чат у вигляді бульбашок", "Chat direction": "Напрям чату", "Chat History": "Історія чату", "Chat History is off for this browser.": "Історія чату вимкнена для цього браузера.", @@ -97,6 +99,7 @@ "Clear memory": "Очистити пам'ять", "Click here for help.": "Клацніть тут, щоб отримати допомогу.", "Click here to": "Натисніть тут, щоб", + "Click here to download user import template file.": "Натисніть тут, щоб завантажити файл шаблону імпорту користувача.", "Click here to select": "Натисніть тут, щоб вибрати", "Click here to select a csv file.": "Натисніть тут, щоб вибрати csv-файл.", "Click here to select a py file.": "Натисніть тут, щоб вибрати py-файл.", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "Необхідно вказати URL-адресу ComfyUI.", "Command": "Команда", "Concurrent Requests": "Одночасні запити", + "Confirm": "Підтвердити", "Confirm Password": "Підтвердіть пароль", + "Confirm your action": "Підтвердіть свою дію", "Connections": "З'єднання", "Contact Admin for WebUI Access": "Зверніться до адміна для отримання доступу до WebUI", "Content": "Зміст", @@ -130,6 +135,8 @@ "Create new secret key": "Створити новий секретний ключ", "Created at": "Створено у", "Created At": "Створено у", + "Created by": "Створено", + "CSV Import": "Імпорт CSV", "Current Model": "Поточна модель", "Current Password": "Поточний пароль", "Custom": "Налаштувати", @@ -151,6 +158,7 @@ "Delete All Chats": "Видалити усі чати", "Delete chat": "Видалити чат", "Delete Chat": "Видалити чат", + "Delete chat?": "Видалити чат?", "delete this link": "видалити це посилання", "Delete User": "Видалити користувача", "Deleted {{deleteModelTag}}": "Видалено {{deleteModelTag}}", @@ -162,7 +170,7 @@ "Discover, download, and explore custom prompts": "Знайдіть, завантажте та досліджуйте налаштовані промти", "Discover, download, and explore model presets": "Знайдіть, завантажте та досліджуйте налаштовані налаштування моделі", "Dismissible": "Неприйнятно", - "Display Emoji in Call": "", + "Display Emoji in Call": "Відображати емодзі у викликах", "Display the username instead of You in the Chat": "Показувати ім'я користувача замість 'Ви' в чаті", "Document": "Документ", "Document Settings": "Налаштування документа", @@ -179,7 +187,7 @@ "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "напр., '30s','10m'. Дійсні одиниці часу: 'с', 'хв', 'г'.", "Edit": "Редагувати", "Edit Doc": "Редагувати документ", - "Edit Memory": "", + "Edit Memory": "Редагувати пам'ять", "Edit User": "Редагувати користувача", "Email": "Електронна пошта", "Embedding Batch Size": "Розмір пакету під час вбудовування", @@ -206,10 +214,10 @@ "Enter Score": "Введіть бал", "Enter Searxng Query URL": "Введіть URL-адресу запиту Searxng", "Enter Serper API Key": "Введіть ключ API Serper", - "Enter Serply API Key": "", + "Enter Serply API Key": "Введіть ключ API Serply", "Enter Serpstack API Key": "Введіть ключ API Serpstack", "Enter stop sequence": "Введіть символ зупинки", - "Enter Tavily API Key": "", + "Enter Tavily API Key": "Введіть ключ API Tavily", "Enter Top K": "Введіть Top K", "Enter URL (e.g. http://127.0.0.1:7860/)": "Введіть URL-адресу (напр., http://127.0.0.1:7860/)", "Enter URL (e.g. http://localhost:11434)": "Введіть URL-адресу (напр., http://localhost:11434)", @@ -224,23 +232,28 @@ "Export chat (.json)": "Експорт чату (.json)", "Export Chats": "Експортувати чати", "Export Documents Mapping": "Експортувати відображення документів", + "Export Functions": "Експорт функцій ", "Export Models": "Експорт моделей", "Export Prompts": "Експортувати промти", - "Export Tools": "", + "Export Tools": "Експортувати інструменти", "External Models": "Зовнішні моделі", "Failed to create API Key.": "Не вдалося створити API ключ.", "Failed to read clipboard contents": "Не вдалося прочитати вміст буфера обміну", "Failed to update settings": "Не вдалося оновити налаштування", "February": "Лютий", "Feel free to add specific details": "Не соромтеся додавати конкретні деталі", + "File": "Файл", "File Mode": "Файловий режим", "File not found.": "Файл не знайдено.", + "Filters": "Фільтри", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Виявлено підробку відбитків: Неможливо використовувати ініціали як аватар. Повернення до зображення профілю за замовчуванням.", "Fluidly stream large external response chunks": "Плавно передавати великі фрагменти зовнішніх відповідей", "Focus chat input": "Фокус вводу чату", "Followed instructions perfectly": "Бездоганно дотримувався інструкцій", + "Form": "Форма", "Format your variables using square brackets like this:": "Форматуйте свої змінні квадратними дужками так:", "Frequency Penalty": "Штраф за частоту", + "Functions": "Функції", "General": "Загальні", "General Settings": "Загальні налаштування", "Generate Image": "Створити зображення", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Привіт, {{name}}", "Help": "Допоможіть", "Hide": "Приховати", + "Hide Model": "Приховати модель", "How can I help you today?": "Чим я можу допомогти вам сьогодні?", "Hybrid Search": "Гібридний пошук", "Image Generation (Experimental)": "Генерування зображень (експериментально)", @@ -262,9 +276,10 @@ "Images": "Зображення", "Import Chats": "Імпортувати чати", "Import Documents Mapping": "Імпортувати відображення документів", + "Import Functions": "Імпорт функцій ", "Import Models": "Імпорт моделей", "Import Prompts": "Імпортувати промти", - "Import Tools": "", + "Import Tools": "Імпортувати інструменти", "Include `--api` flag when running stable-diffusion-webui": "Включіть прапор `--api` при запуску stable-diffusion-webui", "Info": "Інфо", "Input commands": "Команди вводу", @@ -282,12 +297,12 @@ "JWT Token": "Токен JWT", "Keep Alive": "Зберегти активність", "Keyboard shortcuts": "Клавіатурні скорочення", - "Knowledge": "", + "Knowledge": "Знання", "Language": "Мова", "Last Active": "Остання активність", - "Last Modified": "", + "Last Modified": "Востаннє змінено", "Light": "Світла", - "Listening...": "", + "Listening...": "Слухаю...", "LLMs can make mistakes. Verify important information.": "LLMs можуть помилятися. Перевірте важливу інформацію.", "Local Models": "Локальні моделі", "LTR": "LTR", @@ -310,7 +325,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": "", + "MMMM DD, YYYY hh:mm:ss A": "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}} не знайдено", @@ -330,7 +345,7 @@ "Name your model": "Назвіть свою модель", "New Chat": "Новий чат", "New Password": "Новий пароль", - "No documents found": "", + "No documents found": "Документів не знайдено", "No results found": "Не знайдено жодного результату", "No search query generated": "Пошуковий запит не сформовано", "No source available": "Джерело не доступне", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "У рядку команди дозволено використовувати лише алфавітно-цифрові символи та дефіси.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Ой! Зачекайте, будь ласка! Ваші файли ще готуються. Ми робимо все, щоб вони були ідеальними. Будь ласка, будьте терплячі, ми повідомимо вам, коли вони будуть готові.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Упс! Схоже, що URL-адреса невірна. Будь ласка, перевірте ще раз та спробуйте ще раз.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "Упс! У попередній відповіді сталася помилка. Будь ласка, спробуйте ще раз або зверніться до адміністратора.", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Упс! Ви використовуєте непідтримуваний метод (тільки для фронтенду). Будь ласка, обслуговуйте WebUI з бекенду.", "Open": "Відкрити", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "Модель переранжування", "Reranking model disabled": "Модель переранжування вимкнена", "Reranking model set to \"{{reranking_model}}\"": "Модель переранжування встановлено на \"{{reranking_model}}\"", + "Reset": "Скидання", "Reset Upload Directory": "Скинути каталог завантажень", "Reset Vector Storage": "Скинути векторне сховище", "Response AutoCopy to Clipboard": "Автокопіювання відповіді в буфер обміну", @@ -425,17 +442,18 @@ "Search a model": "Шукати модель", "Search Chats": "Пошук в чатах", "Search Documents": "Пошук документів", + "Search Functions": "Пошук функцій", "Search Models": "Пошук моделей", "Search Prompts": "Пошук промтів", - "Search Query Generation Prompt": "", - "Search Query Generation Prompt Length Threshold": "", + "Search Query Generation Prompt": "Підказка для формування пошукового промту", + "Search Query Generation Prompt Length Threshold": "Поріг довжини пошукового запиту для генерації підказки", "Search Result Count": "Кількість результатів пошуку", - "Search Tools": "", + "Search Tools": "Пошуку інструментів ", "Searched {{count}} sites_one": "Переглянуто {{count}} сайт", "Searched {{count}} sites_few": "Переглянуто {{count}} сайти", "Searched {{count}} sites_many": "Переглянуто {{count}} сайтів", "Searched {{count}} sites_other": "Переглянуто {{count}} сайтів", - "Searching \"{{searchQuery}}\"": "", + "Searching \"{{searchQuery}}\"": "Шукаю \"{{searchQuery}}\"", "Searxng Query URL": "URL-адреса запиту Searxng", "See readme.md for instructions": "Див. readme.md для інструкцій", "See what's new": "Подивіться, що нового", @@ -447,7 +465,7 @@ "Select a pipeline": "Виберіть pipeline", "Select a pipeline url": "Виберіть адресу pipeline", "Select an Ollama instance": "Виберіть екземпляр Ollama", - "Select Documents": "", + "Select Documents": "Виберіть документи", "Select model": "Вибрати модель", "Select only one model to call": "Виберіть лише одну модель для виклику", "Selected model(s) do not support image inputs": "Вибрані модель(і) не підтримують вхідні зображення", @@ -456,7 +474,7 @@ "Send message": "Надіслати повідомлення", "September": "Вересень", "Serper API Key": "Ключ API Serper", - "Serply API Key": "", + "Serply API Key": "Ключ API Serply", "Serpstack API Key": "Ключ API Serpstack", "Server connection verified": "З'єднання з сервером підтверджено", "Set as default": "Встановити за замовчуванням", @@ -476,6 +494,7 @@ "short-summary": "короткий зміст", "Show": "Показати", "Show Admin Details in Account Pending Overlay": "Відобразити дані адміна у вікні очікування облікового запису", + "Show Model": "Показати модель", "Show shortcuts": "Показати клавіатурні скорочення", "Showcased creativity": "Продемонстрований креатив", "sidebar": "бокова панель", @@ -497,7 +516,8 @@ "System": "Система", "System Prompt": "Системний промт", "Tags": "Теги", - "Tavily API Key": "", + "Tap to interrupt": "Натисніть, щоб перервати", + "Tavily API Key": "Ключ API Tavily", "Tell us more:": "Розкажи нам більше:", "Temperature": "Температура", "Template": "Шаблон", @@ -507,10 +527,12 @@ "Thanks for your feedback!": "Дякуємо за ваш відгук!", "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Оцінка повинна бути в діапазоні від 0.0 (0%) до 1.0 (100%).", "Theme": "Тема", - "Thinking...": "", + "Thinking...": "Думаю...", + "This action cannot be undone. Do you wish to continue?": "Цю дію не можна скасувати. Ви бажаєте продовжити?", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Це забезпечує збереження ваших цінних розмов у безпечному бекенд-сховищі. Дякуємо!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "Це експериментальна функція, вона може працювати не так, як очікувалося, і може бути змінена в будь-який час.", "This setting does not sync across browsers or devices.": "Це налаштування не синхронізується між браузерами або пристроями.", + "This will delete": "Це призведе до видалення", "Thorough explanation": "Детальне пояснення", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Порада: Оновіть кілька слотів змінних послідовно, натискаючи клавішу табуляції у вікні чату після кожної заміни.", "Title": "Заголовок", @@ -522,14 +544,15 @@ "To access the available model names for downloading,": "Щоб отримати доступ до назв доступних для завантаження моделей,", "To access the GGUF models available for downloading,": "Щоб отримати доступ до моделей GGUF, які можна завантажити,,", "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Щоб отримати доступ до веб-інтерфейсу, зверніться до адміністратора. Адміністратори можуть керувати статусами користувачів з Панелі адміністратора.", - "To add documents here, upload them to the \"Documents\" workspace first.": "", + "To add documents here, upload them to the \"Documents\" workspace first.": "Щоб додати документи сюди, спочатку завантажте їх до робочої області \"Документи\".", "to chat input.": "в чаті.", - "To select toolkits here, add them to the \"Tools\" workspace first.": "", + "To select filters here, add them to the \"Functions\" workspace first.": "Щоб вибрати фільтри тут, спочатку додайте їх до робочої області \"Функції\".", + "To select toolkits here, add them to the \"Tools\" workspace first.": "Щоб вибрати тут набори інструментів, спочатку додайте їх до робочої області \"Інструменти\".", "Today": "Сьогодні", "Toggle settings": "Переключити налаштування", "Toggle sidebar": "Переключити бокову панель", - "Tokens To Keep On Context Refresh (num_keep)": "", - "Tools": "", + "Tokens To Keep On Context Refresh (num_keep)": "Токени для збереження при оновленні контексту (num_keep)", + "Tools": "Інструменти", "Top K": "Top K", "Top P": "Top P", "Trouble accessing Ollama?": "Проблеми з доступом до Ollama?", @@ -539,10 +562,13 @@ "Type": "Тип", "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": "", + "UI": "Користувацький інтерфейс", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "Невідомий тип файлу '{{file_type}}'. Завантаження файлу все одно продовжується.", + "Update": "Оновлення", "Update and Copy Link": "Оновлення та копіювання посилання", "Update password": "Оновити пароль", + "Updated at": "Оновлено на", + "Upload": "Завантажити", "Upload a GGUF model": "Завантажити GGUF модель", "Upload Files": "Завантажити файли", "Upload Pipeline": "Завантаження Pipeline", @@ -561,6 +587,7 @@ "variable": "змінна", "variable to have them replaced with clipboard content.": "змінна, щоб замінити їх вмістом буфера обміну.", "Version": "Версія", + "Voice": "Голос", "Warning": "Увага!", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Попередження: Якщо ви оновлюєте або змінюєте модель вбудовування, вам потрібно буде повторно імпортувати всі документи.", "Web": "Веб", @@ -570,7 +597,6 @@ "Web Search": "Веб-пошук", "Web Search Engine": "Веб-пошукова система", "Webhook URL": "URL веб-запиту", - "WebUI Add-ons": "Додатки WebUI", "WebUI Settings": "Налаштування WebUI", "WebUI will make requests to": "WebUI буде робити запити до", "What’s New in": "Що нового в", diff --git a/src/lib/i18n/locales/vi-VN/translation.json b/src/lib/i18n/locales/vi-VN/translation.json index b1b8c24dc7..5217a30b1a 100644 --- a/src/lib/i18n/locales/vi-VN/translation.json +++ b/src/lib/i18n/locales/vi-VN/translation.json @@ -41,7 +41,8 @@ "All Users": "Danh sách người sử dụng", "Allow": "Cho phép", "Allow Chat Deletion": "Cho phép Xóa nội dung chat", - "Allow non-local voices": "", + "Allow non-local voices": "Cho phép giọng nói không bản xứ", + "Allow User Location": "Cho phép sử dụng vị trí người dùng", "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ý", @@ -54,7 +55,7 @@ "April": "Tháng 4", "Archive": "Lưu trữ", "Archive All Chats": "Lưu tất cả các cuộc Chat", - "Archived Chats": "bản ghi trò chuyện", + "Archived Chats": "Lưu các cuộc Chat", "are allowed - Activate this command by typing": "được phép - Kích hoạt lệnh này bằng cách gõ", "Are you sure?": "Bạn có chắc chắn không?", "Attach file": "Đính kèm file", @@ -81,6 +82,7 @@ "Capabilities": "Năng lực", "Change Password": "Đổi Mật khẩu", "Chat": "Trò chuyện", + "Chat Background Image": "", "Chat Bubble UI": "Bảng chat", "Chat direction": "Hướng chat", "Chat History": "Lịch sử chat", @@ -97,6 +99,7 @@ "Clear memory": "Xóa bộ nhớ", "Click here for help.": "Bấm vào đây để được trợ giúp.", "Click here to": "Nhấn vào đây để", + "Click here to download user import template file.": "", "Click here to select": "Bấm vào đây để chọn", "Click here to select a csv file.": "Nhấn vào đây để chọn tệp csv", "Click here to select a py file.": "Nhấn vào đây để chọn tệp py", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "Base URL của ComfyUI là bắt buộc.", "Command": "Lệnh", "Concurrent Requests": "Các truy vấn đồng thời", + "Confirm": "Xác nhận", "Confirm Password": "Xác nhận Mật khẩu", + "Confirm your action": "Xác nhận hành động của bạn", "Connections": "Kết nối", "Contact Admin for WebUI Access": "Liên hệ với Quản trị viên để được cấp quyền truy cập", "Content": "Nội dung", @@ -130,6 +135,8 @@ "Create new secret key": "Tạo key bí mật mới", "Created at": "Được tạo vào lúc", "Created At": "Tạo lúc", + "Created by": "", + "CSV Import": "", "Current Model": "Mô hình hiện tại", "Current Password": "Mật khẩu hiện tại", "Custom": "Tùy chỉnh", @@ -151,6 +158,7 @@ "Delete All Chats": "Xóa mọi cuộc Chat", "Delete chat": "Xóa nội dung chat", "Delete Chat": "Xóa chat", + "Delete chat?": "Xóa chat?", "delete this link": "Xóa link này", "Delete User": "Xóa người dùng", "Deleted {{deleteModelTag}}": "Đã xóa {{deleteModelTag}}", @@ -162,7 +170,7 @@ "Discover, download, and explore custom prompts": "Tìm kiếm, tải về và khám phá thêm các prompt tùy chỉnh", "Discover, download, and explore model presets": "Tìm kiếm, tải về và khám phá thêm các thiết lập mô hình sẵn", "Dismissible": "Có thể loại bỏ", - "Display Emoji in Call": "", + "Display Emoji in Call": "Hiển thị Emoji trong cuộc gọi", "Display the username instead of You in the Chat": "Hiển thị tên người sử dụng thay vì 'Bạn' trong nội dung chat", "Document": "Tài liệu", "Document Settings": "Cấu hình kho tài liệu", @@ -179,7 +187,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 Memory": "Sửa Memory", "Edit User": "Thay đổi thông tin người sử dụng", "Email": "Email", "Embedding Batch Size": "", @@ -209,7 +217,7 @@ "Enter Serply API Key": "Nhập Serply API Key", "Enter Serpstack API Key": "Nhập Serpstack API Key", "Enter stop sequence": "Nhập stop sequence", - "Enter Tavily API Key": "", + "Enter Tavily API Key": "Nhập Tavily API Key", "Enter Top K": "Nhập Top K", "Enter URL (e.g. http://127.0.0.1:7860/)": "Nhập URL (vd: http://127.0.0.1:7860/)", "Enter URL (e.g. http://localhost:11434)": "Nhập URL (vd: http://localhost:11434)", @@ -224,6 +232,7 @@ "Export chat (.json)": "Tải chat (.json)", "Export Chats": "Tải nội dung chat về máy", "Export Documents Mapping": "Tải cấu trúc tài liệu về máy", + "Export Functions": "", "Export Models": "Tải Models về máy", "Export Prompts": "Tải các prompt về máy", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "Lỗi khi cập nhật các cài đặt", "February": "Tháng 2", "Feel free to add specific details": "Mô tả chi tiết về chất lượng của câu hỏi và phương án trả lời", + "File": "Tệp", "File Mode": "Chế độ Tệp văn bản", "File not found.": "Không tìm thấy tệp.", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "Phát hiện giả mạo vân tay: Không thể sử dụng tên viết tắt làm hình đại diện. Mặc định là hình ảnh hồ sơ mặc định.", "Fluidly stream large external response chunks": "Truyền tải các khối phản hồi bên ngoài lớn một cách trôi chảy", "Focus chat input": "Tập trung vào nội dung chat", "Followed instructions perfectly": "Tuân theo chỉ dẫn một cách hoàn hảo", + "Form": "", "Format your variables using square brackets like this:": "Định dạng các biến của bạn bằng cách sử dụng dấu ngoặc vuông như thế này:", "Frequency Penalty": "Hình phạt tần số", + "Functions": "", "General": "Cài đặt chung", "General Settings": "Cấu hình chung", "Generate Image": "Sinh ảnh", @@ -254,6 +267,7 @@ "Hello, {{name}}": "Xin chào {{name}}", "Help": "Trợ giúp", "Hide": "Ẩn", + "Hide Model": "Ẩn mô hình", "How can I help you today?": "Tôi có thể giúp gì cho bạn hôm nay?", "Hybrid Search": "Tìm kiếm Hybrid", "Image Generation (Experimental)": "Tạo ảnh (thử nghiệm)", @@ -262,6 +276,7 @@ "Images": "Hình ảnh", "Import Chats": "Nạp lại nội dung chat", "Import Documents Mapping": "Nạp cấu trúc tài liệu", + "Import Functions": "", "Import Models": "Nạp model", "Import Prompts": "Nạp các prompt lên hệ thống", "Import Tools": "", @@ -285,7 +300,7 @@ "Knowledge": "Kiến thức", "Language": "Ngôn ngữ", "Last Active": "Truy cập gần nhất", - "Last Modified": "", + "Last Modified": "Lần sửa gần nhất", "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.", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "Chỉ ký tự số và gạch nối được phép trong chuỗi lệnh.", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "Vui lòng kiên nhẫn chờ đợi! Các tệp của bạn vẫn đang trong được phân tích và xử lý. Chúng tôi đang cố gắng hoàn thành chúng. Vui lòng kiên nhẫn và chúng tôi sẽ cho bạn biết khi chúng sẵn sàng.", "Oops! Looks like the URL is invalid. Please double-check and try again.": "Rất tiếc! URL dường như không hợp lệ. Vui lòng kiểm tra lại và thử lại.", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Rất tiếc! Bạn đang sử dụng một phương thức không được hỗ trợ (chỉ dành cho frontend). Vui lòng cung cấp phương thức cho WebUI từ phía backend.", "Open": "Mở", "Open AI": "Open AI", @@ -406,7 +422,8 @@ "Reranking Model": "Reranking Model", "Reranking model disabled": "Reranking model disabled", "Reranking model set to \"{{reranking_model}}\"": "Reranking model set to \"{{reranking_model}}\"", - "Reset Upload Directory": "", + "Reset": "Xóa toàn bộ", + "Reset Upload Directory": "Xóa toàn bộ thư mục Upload", "Reset Vector Storage": "Cài đặt lại Vector Storage", "Response AutoCopy to Clipboard": "Tự động Sao chép Phản hồi vào clipboard", "Role": "Vai trò", @@ -425,13 +442,14 @@ "Search a model": "Tìm model", "Search Chats": "Tìm kiếm các cuộc Chat", "Search Documents": "Tìm tài liệu", + "Search Functions": "", "Search Models": "Tìm model", "Search Prompts": "Tìm prompt", "Search Query Generation Prompt": "Prompt tạo câu truy vấn, tìm kiếm", "Search Query Generation Prompt Length Threshold": "Ngưỡng độ dài prompt tạo câu truy vấn, tìm kiếm", "Search Result Count": "Số kết quả tìm kiếm", "Search Tools": "", - "Searched {{count}} sites_other": "Đã tìm {{count}} sites_other", + "Searched {{count}} sites_other": "Đã tìm thấy {{count}} trang web", "Searching \"{{searchQuery}}\"": "Đang tìm \"{{searchQuery}}\"", "Searxng Query URL": "URL truy vấn Searxng", "See readme.md for instructions": "Xem readme.md để biết hướng dẫn", @@ -473,6 +491,7 @@ "short-summary": "tóm tắt ngắn", "Show": "Hiển thị", "Show Admin Details in Account Pending Overlay": "Hiển thị thông tin của Quản trị viên trên màn hình hiển thị Tài khoản đang chờ xử lý", + "Show Model": "Hiện mô hình", "Show shortcuts": "Hiển thị phím tắt", "Showcased creativity": "Thể hiện sự sáng tạo", "sidebar": "thanh bên", @@ -494,6 +513,7 @@ "System": "Hệ thống", "System Prompt": "Prompt Hệ thống (System Prompt)", "Tags": "Thẻ", + "Tap to interrupt": "Chạm để ngừng", "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", @@ -505,9 +525,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "Điểm (score) phải có giá trị từ 0,0 (0%) đến 1,0 (100%).", "Theme": "Chủ đề", "Thinking...": "Đang suy luận...", + "This action cannot be undone. Do you wish to continue?": "Hành động này không thể được hoàn tác. Bạn có muốn tiếp tục không?", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "Điều này đảm bảo rằng các nội dung chat có giá trị của bạn được lưu an toàn vào cơ sở dữ liệu backend của bạn. Cảm ơn bạn!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "Đây là tính năng thử nghiệm, có thể không hoạt động như mong đợi và có thể thay đổi bất kỳ lúc nào.", "This setting does not sync across browsers or devices.": "Cài đặt này không đồng bộ hóa trên các trình duyệt hoặc thiết bị.", + "This will delete": "Chat này sẽ bị xóa", "Thorough explanation": "Giải thích kỹ lưỡng", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "Mẹo: Cập nhật nhiều khe biến liên tiếp bằng cách nhấn phím tab trong đầu vào trò chuyện sau mỗi việc thay thế.", "Title": "Tiêu đề", @@ -521,6 +543,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "Để truy cập vui lòng liên hệ với quản trị viên.", "To add documents here, upload them to the \"Documents\" workspace first.": "Để thêm tài liệu, trước tiên hãy upload chúng lên khu vực \"Tài liệu\".", "to chat input.": "đến đầu vào trò chuyện.", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "Hôm nay", "Toggle settings": "Bật/tắt cài đặt", @@ -536,10 +559,13 @@ "Type": "Kiểu", "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": "", + "UI": "Giao diện", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", + "Update": "Cập nhật", "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": "Cập nhật lúc", + "Upload": "", "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": "", @@ -552,12 +578,13 @@ "use_mmap (Ollama)": "use_mmap (Ollama)", "user": "Người sử dụng", "User Permissions": "Phân quyền sử dụng", - "Users": "người sử dụng", + "Users": "Người sử dụng", "Utilize": "Sử dụng", "Valid time units:": "Đơn vị thời gian hợp lệ:", "variable": "biến", "variable to have them replaced with clipboard content.": "biến để có chúng được thay thế bằng nội dung clipboard.", "Version": "Version", + "Voice": "Giọng nói", "Warning": "Cảnh báo", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "Cảnh báo: Nếu cập nhật hoặc thay đổi embedding model, bạn sẽ cần cập nhật lại tất cả tài liệu.", "Web": "Web", @@ -567,7 +594,6 @@ "Web Search": "Tìm kiếm Web", "Web Search Engine": "Chức năng Tìm kiếm Web", "Webhook URL": "Webhook URL", - "WebUI Add-ons": "Tiện ích WebUI", "WebUI Settings": "Cài đặt WebUI", "WebUI will make requests to": "WebUI sẽ thực hiện các yêu cầu đến", "What’s New in": "Thông tin mới về", diff --git a/src/lib/i18n/locales/zh-CN/translation.json b/src/lib/i18n/locales/zh-CN/translation.json index 14a3dd4d70..7b9a6beaa6 100644 --- a/src/lib/i18n/locales/zh-CN/translation.json +++ b/src/lib/i18n/locales/zh-CN/translation.json @@ -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": "助手", @@ -66,7 +67,7 @@ "AUTOMATIC1111 Base URL is required.": "需要 AUTOMATIC1111 基础地址。", "available!": "版本可用!", "Back": "返回", - "Bad Response": "点踩回复", + "Bad Response": "点踩此回答", "Banners": "公告横幅", "Base Model (From)": "基础模型 (来自)", "Batch Size (num_batch)": "批大小 (num_batch)", @@ -81,8 +82,9 @@ "Capabilities": "能力", "Change Password": "更改密码", "Chat": "对话", + "Chat Background Image": "对话背景图片", "Chat Bubble UI": "气泡样式对话", - "Chat direction": "对话文字方向", + "Chat direction": "对话样式方向", "Chat History": "对话历史记录", "Chat History is off for this browser.": "此浏览器已关闭对话历史记录功能。", "Chats": "对话", @@ -97,6 +99,7 @@ "Clear memory": "清除记忆", "Click here for help.": "点击这里获取帮助。", "Click here to": "单击", + "Click here to download user import template file.": "", "Click here to select": "点击这里选择", "Click here to select a csv file.": "单击此处选择 csv 文件。", "Click here to select a py file.": "单击此处选择 py 文件。", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "ComfyUI 基础地址为必需填写。", "Command": "命令", "Concurrent Requests": "并发请求", + "Confirm": "确认", "Confirm Password": "确认密码", + "Confirm your action": "确认您的操作", "Connections": "外部连接", "Contact Admin for WebUI Access": "请联系管理员以获取访问权限", "Content": "内容", @@ -130,6 +135,8 @@ "Create new secret key": "创建新安全密钥", "Created at": "创建于", "Created At": "创建于", + "Created by": "", + "CSV Import": "", "Current Model": "当前模型", "Current Password": "当前密码", "Custom": "自定义", @@ -151,6 +158,7 @@ "Delete All Chats": "删除所有对话记录", "Delete chat": "删除对话记录", "Delete Chat": "删除对话记录", + "Delete chat?": "删除对话记录?", "delete this link": "此处删除这个链接", "Delete User": "删除用户", "Deleted {{deleteModelTag}}": "已删除 {{deleteModelTag}}", @@ -179,7 +187,7 @@ "e.g. '30s','10m'. Valid time units are 's', 'm', 'h'.": "例如 '30s','10m'。有效的时间单位是秒:'s',分:'m',时:'h'。", "Edit": "编辑", "Edit Doc": "编辑文档", - "Edit Memory": "", + "Edit Memory": "编辑记忆", "Edit User": "编辑用户", "Email": "电子邮箱", "Embedding Batch Size": "嵌入层批处理大小 (Embedding Batch Size)", @@ -209,7 +217,7 @@ "Enter Serply API Key": "输入 Serply API 密钥", "Enter Serpstack API Key": "输入 Serpstack API 密钥", "Enter stop sequence": "输入停止序列 (Stop Sequence)", - "Enter Tavily API Key": "", + "Enter Tavily API Key": "输入 Tavily API 密钥", "Enter Top K": "输入 Top K", "Enter URL (e.g. http://127.0.0.1:7860/)": "输入地址 (例如:http://127.0.0.1:7860/)", "Enter URL (e.g. http://localhost:11434)": "输入地址 (例如:http://localhost:11434)", @@ -224,6 +232,7 @@ "Export chat (.json)": "JSON 文件 (.json)", "Export Chats": "导出对话", "Export Documents Mapping": "导出文档映射", + "Export Functions": "导出功能", "Export Models": "导出模型", "Export Prompts": "导出提示词", "Export Tools": "导出工具", @@ -233,28 +242,33 @@ "Failed to update settings": "无法更新设置", "February": "二月", "Feel free to add specific details": "欢迎补充具体细节", + "File": "文件", "File Mode": "文件模式", "File not found.": "文件未找到。", + "Filters": "过滤器", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "检测到指纹伪造:无法使用姓名缩写作为头像。默认使用默认个人形象。", "Fluidly stream large external response chunks": "流畅地传输外部大型响应块数据", "Focus chat input": "聚焦对话输入", "Followed instructions perfectly": "完全按照指示执行", + "Form": "", "Format your variables using square brackets like this:": "使用这样的方括号格式化你的变量:", "Frequency Penalty": "频率惩罚", + "Functions": "功能", "General": "通用", "General Settings": "通用设置", "Generate Image": "生成图像", "Generating search query": "生成搜索查询", "Generation Info": "生成信息", - "Good Response": "点赞回复", + "Good Response": "点赞此回答", "Google PSE API Key": "Google PSE API 密钥", "Google PSE Engine Id": "Google PSE 引擎 ID", "h:mm a": "HH:mm", "has no conversations.": "没有对话。", - "Hello, {{name}}": "你好,{{name}}", + "Hello, {{name}}": "您好,{{name}}", "Help": "帮助", "Hide": "隐藏", - "How can I help you today?": "今天我能帮你做些什么?", + "Hide Model": "隐藏模型", + "How can I help you today?": "有什么我能帮您的吗?", "Hybrid Search": "混合搜索", "Image Generation (Experimental)": "图像生成(实验性)", "Image Generation Engine": "图像生成引擎", @@ -262,6 +276,7 @@ "Images": "图像", "Import Chats": "导入对话记录", "Import Documents Mapping": "导入文档映射", + "Import Functions": "导入功能", "Import Models": "导入模型", "Import Prompts": "导入提示词", "Import Tools": "导入工具", @@ -285,7 +300,7 @@ "Knowledge": "知识库", "Language": "语言", "Last Active": "最后在线时间", - "Last Modified": "", + "Last Modified": "最后修改时间", "Light": "浅色", "Listening...": "正在倾听...", "LLMs can make mistakes. Verify important information.": "大语言模型可能会生成误导性错误信息,请对关键信息加以验证。", @@ -310,7 +325,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": "", + "MMMM DD, YYYY hh:mm:ss A": "YYYY年 MM月 DD日 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}}", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "命令字符串中只允许使用英文字母,数字 (0-9) 以及连字符 (-)。", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "糟糕!请稍等!您的文件还在处理中。我们正在努力让它们达到最佳效果。请耐心等待,准备好后我们会通知您。", "Oops! Looks like the URL is invalid. Please double-check and try again.": "糟糕!此链接似乎为无效链接。请检查后重试。", + "Oops! There was an error in the previous response. Please try again or contact admin.": "糟糕!之前的回复出现了错误。请重试或联系管理员。", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "糟糕!你正在使用不被支持的方法(仅前端)。请从后端提供 WebUI 服务。", "Open": "打开", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "重排模型", "Reranking model disabled": "重排模型已禁用", "Reranking model set to \"{{reranking_model}}\"": "重排模型设置为 \"{{reranking_model}}\"", + "Reset": "重置", "Reset Upload Directory": "重置上传目录", "Reset Vector Storage": "重置向量存储", "Response AutoCopy to Clipboard": "自动复制回复到剪贴板", @@ -425,6 +442,7 @@ "Search a model": "搜索模型", "Search Chats": "搜索对话", "Search Documents": "搜索文档", + "Search Functions": "搜索功能", "Search Models": "搜索模型", "Search Prompts": "搜索提示词", "Search Query Generation Prompt": "搜索查询生成提示", @@ -473,6 +491,7 @@ "short-summary": "简短总结", "Show": "显示", "Show Admin Details in Account Pending Overlay": "在用户待激活界面中显示管理员邮箱等详细信息", + "Show Model": "显示模型", "Show shortcuts": "显示快捷方式", "Showcased creativity": "很有创意", "sidebar": "侧边栏", @@ -494,7 +513,8 @@ "System": "系统", "System Prompt": "系统提示词", "Tags": "标签", - "Tavily API Key": "", + "Tap to interrupt": "点击以中断", + "Tavily API Key": "Tavily API 密钥", "Tell us more:": "请告诉我们更多细节", "Temperature": "温度 (Temperature)", "Template": "模板", @@ -505,15 +525,17 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "分值应介于 0.0(0%)和 1.0(100%)之间。", "Theme": "主题", "Thinking...": "正在思考...", + "This action cannot be undone. Do you wish to continue?": "此操作无法撤销。是否确认继续?", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "这将确保您的宝贵对话被安全地保存到后台数据库中。感谢!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "这是一个实验功能,可能不会如预期那样工作,而且可能随时发生变化。", "This setting does not sync across browsers or devices.": "此设置不会在浏览器或设备之间同步。", + "This will delete": "这将删除", "Thorough explanation": "解释较为详细", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "提示:在每次替换后,在对话输入中按 Tab 键可以连续更新多个变量。", "Title": "标题", "Title (e.g. Tell me a fun fact)": "标题(例如 给我讲一个有趣的事实)", "Title Auto-Generation": "自动生成标题", - "Title cannot be an empty string.": "标题不能为空字符串。", + "Title cannot be an empty string.": "标题不能为空。", "Title Generation Prompt": "用于自动生成标题的提示词", "to": "到", "To access the available model names for downloading,": "要访问可下载的模型名称,", @@ -521,6 +543,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "请联系管理员以访问。管理员可以在后台管理面板中管理用户状态。", "To add documents here, upload them to the \"Documents\" workspace first.": "要在此处添加文档,请先将它们上传到工作空间中的“文档”内。", "to chat input.": "到对话输入。", + "To select filters here, add them to the \"Functions\" workspace first.": "要在这里选择过滤器,请先将它们添加到工作空间中的“功能”。", "To select toolkits here, add them to the \"Tools\" workspace first.": "要在这里选择工具包,请先将它们添加到工作空间中的“工具”。", "Today": "今天", "Toggle settings": "切换设置", @@ -536,16 +559,19 @@ "Type": "类型", "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": "", + "UI": "界面", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "未知文件类型“{{file_type}}”,将无视继续上传文件。", + "Update": "更新", "Update and Copy Link": "更新和复制链接", "Update password": "更新密码", + "Updated at": "更新于", + "Upload": "上传", "Upload a GGUF model": "上传一个 GGUF 模型", "Upload Files": "上传文件", "Upload Pipeline": "上传 Pipeline", "Upload Progress": "上传进度", "URL Mode": "URL 模式", - "Use '#' in the prompt input to load and select your documents.": "在输入框中输入'#'号来选择并附带你的文档。", + "Use '#' in the prompt input to load and select your documents.": "在输入框中输入'#'号来选择你需要发送的文档。", "Use Gravatar": "使用来自 Gravatar 的头像", "Use Initials": "使用首个字符作为头像", "use_mlock (Ollama)": "use_mlock(Ollama)", @@ -558,6 +584,7 @@ "variable": "变量", "variable to have them replaced with clipboard content.": "变量将被剪贴板内容替换。", "Version": "版本", + "Voice": "语音", "Warning": "警告", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "警告:如果您修改了语义向量模型,则需要重新导入所有文档。", "Web": "网页", @@ -567,7 +594,6 @@ "Web Search": "网络搜索", "Web Search Engine": "网络搜索引擎", "Webhook URL": "Webhook URL", - "WebUI Add-ons": "WebUI 附加组件", "WebUI Settings": "WebUI 设置", "WebUI will make requests to": "WebUI 将请求", "What’s New in": "最近更新内容于", diff --git a/src/lib/i18n/locales/zh-TW/translation.json b/src/lib/i18n/locales/zh-TW/translation.json index a2f7945f34..cefa92cf6a 100644 --- a/src/lib/i18n/locales/zh-TW/translation.json +++ b/src/lib/i18n/locales/zh-TW/translation.json @@ -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": "助手", @@ -81,6 +82,7 @@ "Capabilities": "功能", "Change Password": "修改密碼", "Chat": "聊天", + "Chat Background Image": "", "Chat Bubble UI": "聊天氣泡介面", "Chat direction": "聊天方向", "Chat History": "聊天紀錄功能", @@ -97,6 +99,7 @@ "Clear memory": "", "Click here for help.": "點擊這裡尋找幫助。", "Click here to": "點擊這裡", + "Click here to download user import template file.": "", "Click here to select": "點擊這裡選擇", "Click here to select a csv file.": "點擊這裡選擇 csv 檔案。", "Click here to select a py file.": "", @@ -111,7 +114,9 @@ "ComfyUI Base URL is required.": "需要 ComfyUI 基本 URL", "Command": "命令", "Concurrent Requests": "同時請求", + "Confirm": "", "Confirm Password": "確認密碼", + "Confirm your action": "", "Connections": "連線", "Contact Admin for WebUI Access": "", "Content": "內容", @@ -130,6 +135,8 @@ "Create new secret key": "建立新密鑰", "Created at": "建立於", "Created At": "建立於", + "Created by": "", + "CSV Import": "", "Current Model": "目前模型", "Current Password": "目前密碼", "Custom": "自訂", @@ -151,6 +158,7 @@ "Delete All Chats": "刪除所有聊天紀錄", "Delete chat": "刪除聊天紀錄", "Delete Chat": "刪除聊天紀錄", + "Delete chat?": "", "delete this link": "刪除此連結", "Delete User": "刪除用戶", "Deleted {{deleteModelTag}}": "已刪除 {{deleteModelTag}}", @@ -224,6 +232,7 @@ "Export chat (.json)": "", "Export Chats": "匯出聊天紀錄", "Export Documents Mapping": "匯出文件映射", + "Export Functions": "", "Export Models": "匯出模型", "Export Prompts": "匯出提示詞", "Export Tools": "", @@ -233,14 +242,18 @@ "Failed to update settings": "", "February": "2月", "Feel free to add specific details": "請自由添加詳細內容。", + "File": "", "File Mode": "檔案模式", "File not found.": "找不到檔案。", + "Filters": "", "Fingerprint spoofing detected: Unable to use initials as avatar. Defaulting to default profile image.": "偽裝偽裝檢測:無法使用頭像作為頭像。預設為預設頭像。", "Fluidly stream large external response chunks": "流暢地傳輸大型外部響應區塊", "Focus chat input": "聚焦聊天輸入框", "Followed instructions perfectly": "完全遵循指示", + "Form": "", "Format your variables using square brackets like this:": "像這樣使用方括號來格式化你的變數:", "Frequency Penalty": "頻率懲罰", + "Functions": "", "General": "常用", "General Settings": "常用設定", "Generate Image": "", @@ -254,6 +267,7 @@ "Hello, {{name}}": "你好,{{name}}", "Help": "幫助", "Hide": "隱藏", + "Hide Model": "", "How can I help you today?": "今天能為你做什麼?", "Hybrid Search": "混合搜索", "Image Generation (Experimental)": "圖像生成(實驗功能)", @@ -262,6 +276,7 @@ "Images": "圖片", "Import Chats": "匯入聊天紀錄", "Import Documents Mapping": "匯入文件映射", + "Import Functions": "", "Import Models": "匯入模型", "Import Prompts": "匯入提示詞", "Import Tools": "", @@ -354,6 +369,7 @@ "Only alphanumeric characters and hyphens are allowed in the command string.": "命令字串中只能包含英文字母、數字(0~9)和連字符(-)。", "Oops! Hold tight! Your files are still in the processing oven. We're cooking them up to perfection. Please be patient and we'll let you know once they're ready.": "哎呀!請稍等!你的文件還在處理中。我們正最佳化文件,請耐心等待,一旦準備好,我們會通知你。", "Oops! Looks like the URL is invalid. Please double-check and try again.": "哎呀!看起來 URL 無效。請仔細檢查後再試一次。", + "Oops! There was an error in the previous response. Please try again or contact admin.": "", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "哎呀!你正在使用不支援的方法(僅有前台)。請從後台提供 WebUI。", "Open": "開啟", "Open AI": "Open AI", @@ -406,6 +422,7 @@ "Reranking Model": "重新排序模型", "Reranking model disabled": "重新排序模型已禁用", "Reranking model set to \"{{reranking_model}}\"": "重新排序模型設定為 \"{{reranking_model}}\"", + "Reset": "", "Reset Upload Directory": "", "Reset Vector Storage": "重置向量儲存空間", "Response AutoCopy to Clipboard": "自動複製回答到剪貼簿", @@ -425,6 +442,7 @@ "Search a model": "搜尋模型", "Search Chats": "搜尋聊天", "Search Documents": "搜尋文件", + "Search Functions": "", "Search Models": "搜尋模型", "Search Prompts": "搜尋提示詞", "Search Query Generation Prompt": "", @@ -473,6 +491,7 @@ "short-summary": "簡短摘要", "Show": "顯示", "Show Admin Details in Account Pending Overlay": "", + "Show Model": "", "Show shortcuts": "顯示快速鍵", "Showcased creativity": "展示創造性", "sidebar": "側邊欄", @@ -494,6 +513,7 @@ "System": "系統", "System Prompt": "系統提示詞", "Tags": "標籤", + "Tap to interrupt": "", "Tavily API Key": "", "Tell us more:": "告訴我們更多:", "Temperature": "溫度", @@ -505,9 +525,11 @@ "The score should be a value between 0.0 (0%) and 1.0 (100%).": "分數應該介於 0.0(0%)和 1.0(100%)之間。", "Theme": "主題", "Thinking...": "", + "This action cannot be undone. Do you wish to continue?": "", "This ensures that your valuable conversations are securely saved to your backend database. Thank you!": "這確保你寶貴的對話安全地儲存到你的後台資料庫。謝謝!", "This is an experimental feature, it may not function as expected and is subject to change at any time.": "", "This setting does not sync across browsers or devices.": "此設定不會在瀏覽器或裝置間同步。", + "This will delete": "", "Thorough explanation": "詳細說明", "Tip: Update multiple variable slots consecutively by pressing the tab key in the chat input after each replacement.": "提示:透過在每次替換後在聊天輸入框中按 Tab 鍵連續更新多個變數。", "Title": "標題", @@ -521,6 +543,7 @@ "To access the WebUI, please reach out to the administrator. Admins can manage user statuses from the Admin Panel.": "", "To add documents here, upload them to the \"Documents\" workspace first.": "", "to chat input.": "到聊天輸入框來啟動此命令。", + "To select filters here, add them to the \"Functions\" workspace first.": "", "To select toolkits here, add them to the \"Tools\" workspace first.": "", "Today": "今天", "Toggle settings": "切換設定", @@ -536,10 +559,13 @@ "Type": "類型", "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}}',但接受並視為純文字", + "UI": "", + "Unknown file type '{{file_type}}'. Proceeding with the file upload anyway.": "", "Update": "", "Update and Copy Link": "更新並複製連結", "Update password": "更新密碼", + "Updated at": "", + "Upload": "", "Upload a GGUF model": "上傳一個 GGUF 模型", "Upload Files": "上傳文件", "Upload Pipeline": "", @@ -558,6 +584,7 @@ "variable": "變數", "variable to have them replaced with clipboard content.": "變數將替換為剪貼簿內容", "Version": "版本", + "Voice": "", "Warning": "警告", "Warning: If you update or change your embedding model, you will need to re-import all documents.": "警告:如果更新或更改你的嵌入模型,則需要重新導入所有文件", "Web": "網頁", @@ -567,7 +594,6 @@ "Web Search": "Web 搜尋", "Web Search Engine": "Web 搜尋引擎", "Webhook URL": "Webhook URL", - "WebUI Add-ons": "WebUI 擴充套件", "WebUI Settings": "WebUI 設定", "WebUI will make requests to": "WebUI 將會存取", "What’s New in": "全新內容", diff --git a/src/lib/stores/index.ts b/src/lib/stores/index.ts index 5420865ead..8a481fe6cd 100644 --- a/src/lib/stores/index.ts +++ b/src/lib/stores/index.ts @@ -27,7 +27,9 @@ export const tags = writable([]); export const models: Writable = writable([]); export const prompts: Writable = writable([]); export const documents: Writable = writable([]); + export const tools = writable([]); +export const functions = writable([]); export const banners: Writable = writable([]); diff --git a/src/lib/utils/characters/index.ts b/src/lib/utils/characters/index.ts new file mode 100644 index 0000000000..af3436693a --- /dev/null +++ b/src/lib/utils/characters/index.ts @@ -0,0 +1,197 @@ +import CRC32 from 'crc-32'; + +export const parseFile = async (file) => { + if (file.type === 'application/json') { + return await parseJsonFile(file); + } else if (file.type === 'image/png') { + return await parsePngFile(file); + } else { + throw new Error('Unsupported file type'); + } +}; + +const parseJsonFile = async (file) => { + const text = await file.text(); + const json = JSON.parse(text); + + const character = extractCharacter(json); + + return { + file, + json, + formats: detectFormats(json), + character + }; +}; + +const parsePngFile = async (file) => { + const arrayBuffer = await file.arrayBuffer(); + const text = parsePngText(arrayBuffer); + const json = JSON.parse(text); + + const image = URL.createObjectURL(file); + const character = extractCharacter(json); + + return { + file, + json, + image, + formats: detectFormats(json), + character + }; +}; + +const parsePngText = (arrayBuffer) => { + const textChunkKeyword = 'chara'; + const chunks = readPngChunks(new Uint8Array(arrayBuffer)); + + const textChunk = chunks + .filter((chunk) => chunk.type === 'tEXt') + .map((chunk) => decodeTextChunk(chunk.data)) + .find((entry) => entry.keyword === textChunkKeyword); + + if (!textChunk) { + throw new Error(`No PNG text chunk named "${textChunkKeyword}" found`); + } + + try { + return new TextDecoder().decode(Uint8Array.from(atob(textChunk.text), (c) => c.charCodeAt(0))); + } catch (e) { + throw new Error('Unable to parse "chara" field as base64', e); + } +}; + +const readPngChunks = (data) => { + const isValidPng = + data[0] === 0x89 && + data[1] === 0x50 && + data[2] === 0x4e && + data[3] === 0x47 && + data[4] === 0x0d && + data[5] === 0x0a && + data[6] === 0x1a && + data[7] === 0x0a; + + if (!isValidPng) throw new Error('Invalid PNG file'); + + let chunks = []; + let offset = 8; // Skip PNG signature + + while (offset < data.length) { + let length = + (data[offset] << 24) | (data[offset + 1] << 16) | (data[offset + 2] << 8) | data[offset + 3]; + let type = String.fromCharCode.apply(null, data.slice(offset + 4, offset + 8)); + let chunkData = data.slice(offset + 8, offset + 8 + length); + let crc = + (data[offset + 8 + length] << 24) | + (data[offset + 8 + length + 1] << 16) | + (data[offset + 8 + length + 2] << 8) | + data[offset + 8 + length + 3]; + + if (CRC32.buf(chunkData, CRC32.str(type)) !== crc) { + throw new Error(`Invalid CRC for chunk type "${type}"`); + } + + chunks.push({ type, data: chunkData, crc }); + offset += 12 + length; + } + + return chunks; +}; + +const decodeTextChunk = (data) => { + let i = 0; + const keyword = []; + const text = []; + + for (; i < data.length && data[i] !== 0; i++) { + keyword.push(String.fromCharCode(data[i])); + } + + for (i++; i < data.length; i++) { + text.push(String.fromCharCode(data[i])); + } + + return { keyword: keyword.join(''), text: text.join('') }; +}; + +const extractCharacter = (json) => { + function getTrimmedValue(json, keys) { + return keys + .map((key) => { + const keyParts = key.split('.'); + let value = json; + for (const part of keyParts) { + if (value && value[part] != null) { + value = value[part]; + } else { + value = null; + break; + } + } + return value && value.trim(); + }) + .find((value) => value); + } + + const name = getTrimmedValue(json, ['char_name', 'name', 'data.name']); + const summary = getTrimmedValue(json, ['personality', 'title', 'data.description']); + const personality = getTrimmedValue(json, ['char_persona', 'description', 'data.personality']); + const scenario = getTrimmedValue(json, ['world_scenario', 'scenario', 'data.scenario']); + const greeting = getTrimmedValue(json, [ + 'char_greeting', + 'greeting', + 'first_mes', + 'data.first_mes' + ]); + const examples = getTrimmedValue(json, [ + 'example_dialogue', + 'mes_example', + 'definition', + 'data.mes_example' + ]); + + return { name, summary, personality, scenario, greeting, examples }; +}; + +const detectFormats = (json) => { + const formats = []; + + if ( + json.char_name && + json.char_persona && + json.world_scenario && + json.char_greeting && + json.example_dialogue + ) + formats.push('Text Generation Character'); + if ( + json.name && + json.personality && + json.description && + json.scenario && + json.first_mes && + json.mes_example + ) + formats.push('TavernAI Character'); + if ( + json.character && + json.character.name && + json.character.title && + json.character.description && + json.character.greeting && + json.character.definition + ) + formats.push('CharacterAI Character'); + if ( + json.info && + json.info.character && + json.info.character.name && + json.info.character.title && + json.info.character.description && + json.info.character.greeting + ) + formats.push('CharacterAI History'); + + return formats; +}; diff --git a/src/lib/utils/index.ts b/src/lib/utils/index.ts index ec9ada06de..1950a2f2a5 100644 --- a/src/lib/utils/index.ts +++ b/src/lib/utils/index.ts @@ -1,12 +1,23 @@ import { v4 as uuidv4 } from 'uuid'; import sha256 from 'js-sha256'; +import { WEBUI_BASE_URL } from '$lib/constants'; ////////////////////////// // Helper functions ////////////////////////// export const sanitizeResponseContent = (content: string) => { - return content + // First, temporarily replace valid
diff --git a/src/routes/(app)/workspace/functions/+page.svelte b/src/routes/(app)/workspace/functions/+page.svelte new file mode 100644 index 0000000000..8c6c212fab --- /dev/null +++ b/src/routes/(app)/workspace/functions/+page.svelte @@ -0,0 +1,5 @@ + + + diff --git a/src/routes/(app)/workspace/functions/create/+page.svelte b/src/routes/(app)/workspace/functions/create/+page.svelte new file mode 100644 index 0000000000..0f73cf94ed --- /dev/null +++ b/src/routes/(app)/workspace/functions/create/+page.svelte @@ -0,0 +1,60 @@ + + +{#if mounted} + { + saveHandler(e.detail); + }} + /> +{/if} diff --git a/src/routes/(app)/workspace/functions/edit/+page.svelte b/src/routes/(app)/workspace/functions/edit/+page.svelte new file mode 100644 index 0000000000..21fc5acb64 --- /dev/null +++ b/src/routes/(app)/workspace/functions/edit/+page.svelte @@ -0,0 +1,68 @@ + + +{#if func} + { + saveHandler(e.detail); + }} + /> +{:else} +
+
+ +
+
+{/if} diff --git a/src/routes/(app)/workspace/models/create/+page.svelte b/src/routes/(app)/workspace/models/create/+page.svelte index 130818c6af..b870dec58e 100644 --- a/src/routes/(app)/workspace/models/create/+page.svelte +++ b/src/routes/(app)/workspace/models/create/+page.svelte @@ -4,6 +4,8 @@ import { goto } from '$app/navigation'; import { settings, user, config, models, tools } from '$lib/stores'; + import TurndownService from 'turndown'; + import { onMount, tick, getContext } from 'svelte'; import { addNewModel, getModelById, getModelInfos } from '$lib/apis/models'; import { getModels } from '$lib/apis'; @@ -14,6 +16,7 @@ import Knowledge from '$lib/components/workspace/Models/Knowledge.svelte'; import ToolsSelector from '$lib/components/workspace/Models/ToolsSelector.svelte'; import { stringify } from 'postcss'; + import { parseFile } from '$lib/utils/characters'; const i18n = getContext('i18n'); @@ -60,7 +63,10 @@ let knowledge = []; $: if (name) { - id = name.replace(/\s+/g, '-').toLowerCase(); + id = name + .replace(/\s+/g, '-') + .replace(/[^a-zA-Z0-9-]/g, '') + .toLowerCase(); } const addUsage = (base_model_id) => { @@ -213,9 +219,36 @@ accept="image/*" on:change={() => { let reader = new FileReader(); - reader.onload = (event) => { + reader.onload = async (event) => { let originalImageUrl = `${event.target.result}`; + let character = await parseFile(inputFiles[0]).catch((error) => { + return null; + }); + + console.log(character); + + if (character && character.character) { + character = character.character; + console.log(character); + + name = character.name; + + const pattern = /<\/?[a-z][\s\S]*>/i; + if (character.summary.match(pattern)) { + const turndownService = new TurndownService(); + info.meta.description = turndownService.turndown(character.summary); + } else { + info.meta.description = character.summary; + } + + info.params.system = `Personality: ${character.personality}${ + character?.scenario ? `\nScenario: ${character.scenario}` : '' + }${character?.greeting ? `\First Message: ${character.greeting}` : ''}${ + character?.examples ? `\nExamples: ${character.examples}` : '' + }`; + } + const img = new Image(); img.src = originalImageUrl; @@ -229,20 +262,20 @@ // Calculate the new width and height to fit within 100x100 let newWidth, newHeight; if (aspectRatio > 1) { - newWidth = 100 * aspectRatio; - newHeight = 100; + newWidth = 250 * aspectRatio; + newHeight = 250; } else { - newWidth = 100; - newHeight = 100 / aspectRatio; + newWidth = 250; + newHeight = 250 / aspectRatio; } // Set the canvas size - canvas.width = 100; - canvas.height = 100; + canvas.width = 250; + canvas.height = 250; // Calculate the position to center the image - const offsetX = (100 - newWidth) / 2; - const offsetY = (100 - newHeight) / 2; + const offsetX = (250 - newWidth) / 2; + const offsetY = (250 - newHeight) / 2; // Draw the image on the canvas ctx.drawImage(img, offsetX, offsetY, newWidth, newHeight); @@ -408,10 +441,11 @@
{#if info.meta.description !== null} - {/if}
diff --git a/src/routes/(app)/workspace/models/edit/+page.svelte b/src/routes/(app)/workspace/models/edit/+page.svelte index 95505d3eeb..ef2ed05587 100644 --- a/src/routes/(app)/workspace/models/edit/+page.svelte +++ b/src/routes/(app)/workspace/models/edit/+page.svelte @@ -5,7 +5,7 @@ import { onMount, getContext } from 'svelte'; import { page } from '$app/stores'; - import { settings, user, config, models, tools } from '$lib/stores'; + import { settings, user, config, models, tools, functions } from '$lib/stores'; import { splitStream } from '$lib/utils'; import { getModelInfos, updateModelById } from '$lib/apis/models'; @@ -16,6 +16,7 @@ import Tags from '$lib/components/common/Tags.svelte'; import Knowledge from '$lib/components/workspace/Models/Knowledge.svelte'; import ToolsSelector from '$lib/components/workspace/Models/ToolsSelector.svelte'; + import FiltersSelector from '$lib/components/workspace/Models/FiltersSelector.svelte'; const i18n = getContext('i18n'); @@ -62,6 +63,7 @@ let knowledge = []; let toolIds = []; + let filterIds = []; const updateHandler = async () => { loading = true; @@ -86,6 +88,14 @@ } } + if (filterIds.length > 0) { + info.meta.filterIds = filterIds; + } else { + if (info.meta.filterIds) { + delete info.meta.filterIds; + } + } + info.params.stop = params.stop ? params.stop.split(',').filter((s) => s.trim()) : null; Object.keys(info.params).forEach((key) => { if (info.params[key] === '' || info.params[key] === null) { @@ -147,6 +157,10 @@ toolIds = [...model?.info?.meta?.toolIds]; } + if (model?.info?.meta?.filterIds) { + filterIds = [...model?.info?.meta?.filterIds]; + } + if (model?.owned_by === 'openai') { capabilities.usage = false; } @@ -190,20 +204,20 @@ // Calculate the new width and height to fit within 100x100 let newWidth, newHeight; if (aspectRatio > 1) { - newWidth = 100 * aspectRatio; - newHeight = 100; + newWidth = 250 * aspectRatio; + newHeight = 250; } else { - newWidth = 100; - newHeight = 100 / aspectRatio; + newWidth = 250; + newHeight = 250 / aspectRatio; } // Set the canvas size - canvas.width = 100; - canvas.height = 100; + canvas.width = 250; + canvas.height = 250; // Calculate the position to center the image - const offsetX = (100 - newWidth) / 2; - const offsetY = (100 - newHeight) / 2; + const offsetX = (250 - newWidth) / 2; + const offsetY = (250 - newHeight) / 2; // Draw the image on the canvas ctx.drawImage(img, offsetX, offsetY, newWidth, newHeight); @@ -369,10 +383,11 @@
{#if info.meta.description !== null} - {/if}
@@ -533,6 +548,13 @@
+
+ func.type === 'filter')} + /> +
+
{$i18n.t('Capabilities')}
diff --git a/src/routes/(app)/workspace/playground/+page.svelte b/src/routes/(app)/workspace/playground/+page.svelte deleted file mode 100644 index aed8abf12b..0000000000 --- a/src/routes/(app)/workspace/playground/+page.svelte +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/static/pyodide/pyodide-lock.json b/static/pyodide/pyodide-lock.json index 8eb262a322..a651b04459 100644 --- a/static/pyodide/pyodide-lock.json +++ b/static/pyodide/pyodide-lock.json @@ -1 +1 @@ -{"info": {"arch": "wasm32", "platform": "emscripten_3_1_52", "python": "3.12.1", "version": "0.26.0a4"}, "packages": {"aiohttp": {"depends": ["aiosignal", "async-timeout", "attrs", "charset-normalizer", "frozenlist", "multidict", "yarl"], "file_name": "aiohttp-3.9.3-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["aiohttp"], "install_dir": "site", "name": "aiohttp", "package_type": "package", "sha256": "1e07b99ebd9ac665e0c4bb123c00ac46a1b14f68db0f06ea95e9ad1f768de48a", "shared_library": false, "unvendored_tests": true, "version": "3.9.3"}, "aiohttp-tests": {"depends": ["aiohttp"], "file_name": "aiohttp-tests.tar", "imports": [], "install_dir": "site", "name": "aiohttp-tests", "package_type": "package", "sha256": "f3f4625b3f9c07bcfad2a63f2fd3b7f5c78d0dc219472dd72c323cb6158ea765", "shared_library": false, "unvendored_tests": false, "version": "3.9.3"}, "aiosignal": {"depends": ["frozenlist"], "file_name": "aiosignal-1.3.1-py3-none-any.whl", "imports": ["aiosignal"], "install_dir": "site", "name": "aiosignal", "package_type": "package", "sha256": "bd9984348206dd32ff133b384e3f2e8094d03364256c56ccbb2e8afd66c35dc7", "shared_library": false, "unvendored_tests": false, "version": "1.3.1"}, "altair": {"depends": ["typing-extensions", "jinja2", "jsonschema", "numpy", "pandas", "toolz", "packaging"], "file_name": "altair-5.2.0-py3-none-any.whl", "imports": ["altair"], "install_dir": "site", "name": "altair", "package_type": "package", "sha256": "17017ac81359471cd838fd07dc53dba6374a369fef80d1b31e02cb788b135c41", "shared_library": false, "unvendored_tests": false, "version": "5.2.0"}, "annotated-types": {"depends": [], "file_name": "annotated_types-0.6.0-py3-none-any.whl", "imports": ["annotated_types"], "install_dir": "site", "name": "annotated-types", "package_type": "package", "sha256": "a000fd5331be47583db3d9f2282f88369d9c98d57c46551fad5e5ef8406f6304", "shared_library": false, "unvendored_tests": true, "version": "0.6.0"}, "annotated-types-tests": {"depends": ["annotated-types"], "file_name": "annotated-types-tests.tar", "imports": [], "install_dir": "site", "name": "annotated-types-tests", "package_type": "package", "sha256": "7a8797206019295a72b35255bec9342616c0959f398ac8b6bff08199ee76fa0f", "shared_library": false, "unvendored_tests": false, "version": "0.6.0"}, "asciitree": {"depends": [], "file_name": "asciitree-0.3.3-py3-none-any.whl", "imports": ["asciitree"], "install_dir": "site", "name": "asciitree", "package_type": "package", "sha256": "5b93a6f21f1e48d41bc231b565f0e44e3c24b73f568e07dd2ad038979bc72be7", "shared_library": false, "unvendored_tests": false, "version": "0.3.3"}, "astropy": {"depends": ["packaging", "numpy", "pyerfa", "pyyaml", "astropy_iers_data"], "file_name": "astropy-6.0.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["astropy"], "install_dir": "site", "name": "astropy", "package_type": "package", "sha256": "f350dd7753772d6448cb141582b859c170c405f9173a14de5b4c21bc59f0f03e", "shared_library": false, "unvendored_tests": false, "version": "6.0.0"}, "astropy-iers-data": {"depends": [], "file_name": "astropy_iers_data-0.2024.2.5.0.30.52-py3-none-any.whl", "imports": ["astropy_iers_data"], "install_dir": "site", "name": "astropy_iers_data", "package_type": "package", "sha256": "d5fb37380d621ca44c79720d1a5748b3a5aaade5399b62433a03668970b941b4", "shared_library": false, "unvendored_tests": true, "version": "0.2024.2.5.0.30.52"}, "astropy-iers-data-tests": {"depends": ["astropy_iers_data"], "file_name": "astropy_iers_data-tests.tar", "imports": [], "install_dir": "site", "name": "astropy_iers_data-tests", "package_type": "package", "sha256": "2d3632ed39635a7c7b464fb09ef46e1a3e1e3980cb4b258e86c674aac00c9f27", "shared_library": false, "unvendored_tests": false, "version": "0.2024.2.5.0.30.52"}, "asttokens": {"depends": ["six"], "file_name": "asttokens-2.4.1-py2.py3-none-any.whl", "imports": ["asttokens"], "install_dir": "site", "name": "asttokens", "package_type": "package", "sha256": "5466ee2bc08d55c32b5938bfd030cd540c35d3e6f22d8bd629f20302710e2193", "shared_library": false, "unvendored_tests": false, "version": "2.4.1"}, "async-timeout": {"depends": [], "file_name": "async_timeout-4.0.3-py3-none-any.whl", "imports": ["async_timeout"], "install_dir": "site", "name": "async-timeout", "package_type": "package", "sha256": "57ec3ac6be13187903343f25af34c0a408f6138d4b5fd25158c900c9b5f2b9a6", "shared_library": false, "unvendored_tests": false, "version": "4.0.3"}, "atomicwrites": {"depends": [], "file_name": "atomicwrites-1.4.1-py2.py3-none-any.whl", "imports": ["atomicwrites"], "install_dir": "site", "name": "atomicwrites", "package_type": "package", "sha256": "ffd6ec457aa4c8402036c33e82b456836c24f6a1359ca99f822f316d1cf53e33", "shared_library": false, "unvendored_tests": false, "version": "1.4.1"}, "attrs": {"depends": ["six"], "file_name": "attrs-23.2.0-py3-none-any.whl", "imports": ["attr", "attrs"], "install_dir": "site", "name": "attrs", "package_type": "package", "sha256": "81c4de76654e86b943b32e4e82736148a432cbb12b8d1164fc5ad7cfb9243b97", "shared_library": false, "unvendored_tests": false, "version": "23.2.0"}, "autograd": {"depends": ["numpy", "future"], "file_name": "autograd-1.6.2-py3-none-any.whl", "imports": ["autograd"], "install_dir": "site", "name": "autograd", "package_type": "package", "sha256": "ab3834f9e822d3be30d5a98daee3ca0315e71b01416fc0425cbf1d388de72c1c", "shared_library": false, "unvendored_tests": true, "version": "1.6.2"}, "autograd-tests": {"depends": ["autograd"], "file_name": "autograd-tests.tar", "imports": [], "install_dir": "site", "name": "autograd-tests", "package_type": "package", "sha256": "75891d06ec94483bd0d7fdac34d18ed1cf8209872a4fa4a17dc060d700594f58", "shared_library": false, "unvendored_tests": false, "version": "1.6.2"}, "awkward-cpp": {"depends": ["numpy"], "file_name": "awkward_cpp-30-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["awkward_cpp"], "install_dir": "site", "name": "awkward-cpp", "package_type": "package", "sha256": "640feb660468bf48e5efe5d20cbda683afcf7f8bb105c4f010fa17bbc1285c15", "shared_library": false, "unvendored_tests": false, "version": "30"}, "b2d": {"depends": ["numpy", "pydantic", "setuptools", "annotated-types"], "file_name": "b2d-0.7.4-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["b2d"], "install_dir": "site", "name": "b2d", "package_type": "package", "sha256": "6d9e688f9c29b4ff368b10740f18d782799302765f59a28b4aa16bc48dc3b804", "shared_library": false, "unvendored_tests": false, "version": "0.7.4"}, "bcrypt": {"depends": [], "file_name": "bcrypt-4.1.2-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["bcrypt"], "install_dir": "site", "name": "bcrypt", "package_type": "package", "sha256": "c4d45f7ff2047ab8fbdb88c4dd972256f9b1e45b2360dd4778b389bbc3ad1a4c", "shared_library": false, "unvendored_tests": false, "version": "4.1.2"}, "beautifulsoup4": {"depends": ["soupsieve"], "file_name": "beautifulsoup4-4.12.3-py3-none-any.whl", "imports": ["bs4"], "install_dir": "site", "name": "beautifulsoup4", "package_type": "package", "sha256": "01c1eb2c5a4781cc2f7dfecfa823f1b7494961fff112946bad1e1d8ab6b67c45", "shared_library": false, "unvendored_tests": true, "version": "4.12.3"}, "beautifulsoup4-tests": {"depends": ["beautifulsoup4"], "file_name": "beautifulsoup4-tests.tar", "imports": [], "install_dir": "site", "name": "beautifulsoup4-tests", "package_type": "package", "sha256": "3b3ae4bafad7bbda5b7183bedcf79cc43462c81ab969c2c87417c3dbf6a8c2f0", "shared_library": false, "unvendored_tests": false, "version": "4.12.3"}, "biopython": {"depends": ["numpy"], "file_name": "biopython-1.83-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["Bio", "BioSQL"], "install_dir": "site", "name": "biopython", "package_type": "package", "sha256": "f5e6a8069d83222dc9cb1b211c9b9dc66c3302cc2a780f744cc4a59bb0acdb03", "shared_library": false, "unvendored_tests": false, "version": "1.83"}, "bitarray": {"depends": [], "file_name": "bitarray-2.9.2-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["bitarray"], "install_dir": "site", "name": "bitarray", "package_type": "package", "sha256": "a0d287fbe3fb707fe3118ef9d397de21e2594944a0ec0492864a850a780cc5cb", "shared_library": false, "unvendored_tests": true, "version": "2.9.2"}, "bitarray-tests": {"depends": ["bitarray"], "file_name": "bitarray-tests.tar", "imports": [], "install_dir": "site", "name": "bitarray-tests", "package_type": "package", "sha256": "3c39bb6ceb6305762b65f37e214e3bf69983e447468d897f8c67a26b852baa99", "shared_library": false, "unvendored_tests": false, "version": "2.9.2"}, "bitstring": {"depends": ["bitarray"], "file_name": "bitstring-4.1.4-py3-none-any.whl", "imports": ["bitstring"], "install_dir": "site", "name": "bitstring", "package_type": "package", "sha256": "63c7cfc49d255b7bc13dc9d4eda35e200c2a228e72964ebd4e778bc87bc02086", "shared_library": false, "unvendored_tests": false, "version": "4.1.4"}, "bleach": {"depends": ["webencodings", "packaging", "six"], "file_name": "bleach-6.1.0-py3-none-any.whl", "imports": ["bleach"], "install_dir": "site", "name": "bleach", "package_type": "package", "sha256": "8a12cd20373857ab49ea3694b563c97a2e32eac0fbc5111992b3d126ed4f9fee", "shared_library": false, "unvendored_tests": false, "version": "6.1.0"}, "bokeh": {"depends": ["contourpy", "numpy", "jinja2", "pandas", "pillow", "python-dateutil", "six", "typing-extensions", "pyyaml", "xyzservices"], "file_name": "bokeh-3.3.4-py3-none-any.whl", "imports": ["bokeh"], "install_dir": "site", "name": "bokeh", "package_type": "package", "sha256": "8090653196364d3f2f2c189db40def602e7c925128bbd44e8c30d43cef2988f6", "shared_library": false, "unvendored_tests": false, "version": "3.3.4"}, "boost-histogram": {"depends": ["numpy"], "file_name": "boost_histogram-1.4.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["boost_histogram"], "install_dir": "site", "name": "boost-histogram", "package_type": "package", "sha256": "989262441355da8dbd367d5c6c522005b379777666ae17cf557d368e770a5d35", "shared_library": false, "unvendored_tests": false, "version": "1.4.0"}, "brotli": {"depends": [], "file_name": "Brotli-1.1.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["brotli"], "install_dir": "site", "name": "brotli", "package_type": "package", "sha256": "077f18bb5c80aa1a647ce43fda007b56b4eae63a2202d77005276b48934a8090", "shared_library": false, "unvendored_tests": false, "version": "1.1.0"}, "cachetools": {"depends": [], "file_name": "cachetools-5.3.2-py3-none-any.whl", "imports": ["cachetools"], "install_dir": "site", "name": "cachetools", "package_type": "package", "sha256": "34012db302cae70aedde58886ca4bea936f82c677b85fa7241465a00b26eec96", "shared_library": false, "unvendored_tests": false, "version": "5.3.2"}, "cartopy": {"depends": ["shapely", "pyshp", "pyproj", "geos", "matplotlib", "scipy"], "file_name": "Cartopy-0.22.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["cartopy"], "install_dir": "site", "name": "Cartopy", "package_type": "package", "sha256": "b9dfef134dfd1fad3fb1675724b061d812d13853b2cd7de5403b56828055fea6", "shared_library": false, "unvendored_tests": true, "version": "0.22.0"}, "cartopy-tests": {"depends": ["cartopy"], "file_name": "Cartopy-tests.tar", "imports": [], "install_dir": "site", "name": "Cartopy-tests", "package_type": "package", "sha256": "915f3f9a97047d88bc90b47625baf2651cdf33e56cb6abb3b7e9591c6efaf2e3", "shared_library": false, "unvendored_tests": false, "version": "0.22.0"}, "cbor-diag": {"depends": [], "file_name": "cbor_diag-1.0.1-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["cbor_diag"], "install_dir": "site", "name": "cbor-diag", "package_type": "package", "sha256": "e8225b83b190e6170853acee826ca2af885a89c71553379211dbf774becd0f5f", "shared_library": false, "unvendored_tests": false, "version": "1.0.1"}, "certifi": {"depends": [], "file_name": "certifi-2024.2.2-py3-none-any.whl", "imports": ["certifi"], "install_dir": "site", "name": "certifi", "package_type": "package", "sha256": "b792ea1db86409b1c105a60323aa4d274f9c035ddb97551210def41e71794990", "shared_library": false, "unvendored_tests": false, "version": "2024.2.2"}, "cffi": {"depends": ["pycparser"], "file_name": "cffi-1.16.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["cffi"], "install_dir": "site", "name": "cffi", "package_type": "package", "sha256": "286c32eeac7f4adbb3ccda11e6bb58b4afc10191dfdb01266877195740ab2814", "shared_library": false, "unvendored_tests": false, "version": "1.16.0"}, "cffi-example": {"depends": ["cffi"], "file_name": "cffi_example-0.1-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["cffi_example"], "install_dir": "site", "name": "cffi_example", "package_type": "package", "sha256": "31726eec11223d4304644028920cd728f5ef590a0523e1c7c4451a02b3230c9a", "shared_library": false, "unvendored_tests": false, "version": "0.1"}, "cftime": {"depends": ["numpy"], "file_name": "cftime-1.6.3-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["cftime"], "install_dir": "site", "name": "cftime", "package_type": "package", "sha256": "41fc7f92d97c200531f1415b3fa20161248a30becf3735a53be2339e206b59d6", "shared_library": false, "unvendored_tests": false, "version": "1.6.3"}, "charset-normalizer": {"depends": [], "file_name": "charset_normalizer-3.3.2-py3-none-any.whl", "imports": ["charset_normalizer"], "install_dir": "site", "name": "charset-normalizer", "package_type": "package", "sha256": "0daa3fbd98e2207bd59dc8d494c16074077bc5d2d8436b9cd5acbdbd0281aff7", "shared_library": false, "unvendored_tests": false, "version": "3.3.2"}, "click": {"depends": [], "file_name": "click-8.1.7-py3-none-any.whl", "imports": ["click"], "install_dir": "site", "name": "click", "package_type": "package", "sha256": "e46e311f0a7242a24249466ddd65aa6f92df73306346aae8b69acac84eaff3b3", "shared_library": false, "unvendored_tests": false, "version": "8.1.7"}, "cligj": {"depends": ["click"], "file_name": "cligj-0.7.2-py3-none-any.whl", "imports": ["cligj"], "install_dir": "site", "name": "cligj", "package_type": "package", "sha256": "d6b51aab3826c2369d6da3cfba7f73102a2286188e94a29a989da87a7adf69de", "shared_library": false, "unvendored_tests": false, "version": "0.7.2"}, "cloudpickle": {"depends": [], "file_name": "cloudpickle-3.0.0-py3-none-any.whl", "imports": ["cloudpickle"], "install_dir": "site", "name": "cloudpickle", "package_type": "package", "sha256": "e332e5d4fd40ee4ec44fa85400bc04c33c89235e5860023edbd1ab42e8a0e114", "shared_library": false, "unvendored_tests": false, "version": "3.0.0"}, "cmyt": {"depends": ["colorspacious", "matplotlib", "more-itertools", "numpy"], "file_name": "cmyt-2.0.0-py3-none-any.whl", "imports": ["cmyt"], "install_dir": "site", "name": "cmyt", "package_type": "package", "sha256": "854819e1a5e221251c47f0bdeeab1252f8927955008402cadb023f63b6f06950", "shared_library": false, "unvendored_tests": true, "version": "2.0.0"}, "cmyt-tests": {"depends": ["cmyt"], "file_name": "cmyt-tests.tar", "imports": [], "install_dir": "site", "name": "cmyt-tests", "package_type": "package", "sha256": "43e96396c5da164ab241a6aff9992d8c2757a41871d875e872629856861516fa", "shared_library": false, "unvendored_tests": false, "version": "2.0.0"}, "colorspacious": {"depends": ["numpy"], "file_name": "colorspacious-1.1.2-py2.py3-none-any.whl", "imports": ["colorspacious"], "install_dir": "site", "name": "colorspacious", "package_type": "package", "sha256": "eed9c2b66938a11cf0d5d7c13e22d326b1a9b682d53883b43995c748eafed6e1", "shared_library": false, "unvendored_tests": false, "version": "1.1.2"}, "contourpy": {"depends": ["numpy"], "file_name": "contourpy-1.2.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["contourpy"], "install_dir": "site", "name": "contourpy", "package_type": "package", "sha256": "c1a9a71a27d1d3700e1b3df8e924ad99bf784356564583548fa2c0c083cc4b07", "shared_library": false, "unvendored_tests": false, "version": "1.2.0"}, "coolprop": {"depends": ["numpy", "matplotlib"], "file_name": "CoolProp-6.6.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["CoolProp"], "install_dir": "site", "name": "coolprop", "package_type": "package", "sha256": "732748ef3341e3240ae36ef48f42e62544ad5f5f753e9f97ae9f48c3190a6995", "shared_library": false, "unvendored_tests": true, "version": "6.6.0"}, "coolprop-tests": {"depends": ["coolprop"], "file_name": "coolprop-tests.tar", "imports": [], "install_dir": "site", "name": "coolprop-tests", "package_type": "package", "sha256": "15df0fa6718c4b06a766739c5719f12392d0c9c6be3a6fda3fad04e122ccbd21", "shared_library": false, "unvendored_tests": false, "version": "6.6.0"}, "coverage": {"depends": ["sqlite3"], "file_name": "coverage-7.4.1-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["coverage"], "install_dir": "site", "name": "coverage", "package_type": "package", "sha256": "0f949d38240fd5b489a4a8e93981641fc16198727d132ce46abb6808fe28a6f3", "shared_library": false, "unvendored_tests": false, "version": "7.4.1"}, "cpp-exceptions-test": {"depends": [], "file_name": "cpp-exceptions-test-0.1.zip", "imports": [], "install_dir": "dynlib", "name": "cpp-exceptions-test", "package_type": "shared_library", "sha256": "d15fdfa489121e0e00cf620457d9b2cf53f43cafa30081f2b62f6ddf9544cfbd", "shared_library": true, "unvendored_tests": false, "version": "0.1"}, "cramjam": {"depends": [], "file_name": "cramjam-2.8.1-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["cramjam"], "install_dir": "site", "name": "cramjam", "package_type": "package", "sha256": "f4f0567dd6ad72c9e9e339c2d113f82a8229b0024f7f047ce168cf35dc1d6741", "shared_library": false, "unvendored_tests": false, "version": "2.8.1"}, "cryptography": {"depends": ["openssl", "six", "cffi"], "file_name": "cryptography-42.0.2-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["cryptography"], "install_dir": "site", "name": "cryptography", "package_type": "package", "sha256": "664a7d2407b41a9ae00c2b2a19ee69e1ab2da98527b71c482991b34864833969", "shared_library": false, "unvendored_tests": false, "version": "42.0.2"}, "cssselect": {"depends": [], "file_name": "cssselect-1.2.0-py2.py3-none-any.whl", "imports": ["cssselect"], "install_dir": "site", "name": "cssselect", "package_type": "package", "sha256": "29b6d7a0ef309b048cb15b22d1a58c3f70c672df5c5df5b4ecdbdf7c44585fd8", "shared_library": false, "unvendored_tests": false, "version": "1.2.0"}, "cycler": {"depends": ["six"], "file_name": "cycler-0.12.1-py3-none-any.whl", "imports": ["cycler"], "install_dir": "site", "name": "cycler", "package_type": "package", "sha256": "90de3625fd90b16c4c3dc18c7fe8e3fced611ae9474839e6f580ec0563c12b1d", "shared_library": false, "unvendored_tests": false, "version": "0.12.1"}, "cysignals": {"depends": [], "file_name": "cysignals-1.11.4-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["cysignals"], "install_dir": "site", "name": "cysignals", "package_type": "package", "sha256": "2b6f31fc1ca97f81373084fa08ef347089d35b6dc596c4439eda857994099714", "shared_library": false, "unvendored_tests": false, "version": "1.11.4"}, "cytoolz": {"depends": ["toolz"], "file_name": "cytoolz-0.12.3-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["cytoolz"], "install_dir": "site", "name": "cytoolz", "package_type": "package", "sha256": "0f55af8c325b35926c7d8c26f5d78bac852aa4c1e389fc833213a6bae7b82f51", "shared_library": false, "unvendored_tests": true, "version": "0.12.3"}, "cytoolz-tests": {"depends": ["cytoolz"], "file_name": "cytoolz-tests.tar", "imports": [], "install_dir": "site", "name": "cytoolz-tests", "package_type": "package", "sha256": "0f3c0664b154211cf43c5151e07d3acddb3c3923b228c54647a5ed355ae5bc5a", "shared_library": false, "unvendored_tests": false, "version": "0.12.3"}, "decorator": {"depends": [], "file_name": "decorator-5.1.1-py3-none-any.whl", "imports": ["decorator"], "install_dir": "site", "name": "decorator", "package_type": "package", "sha256": "60de3bde4818a5b433b46a6e1e3dff7bfea0e8be075f6c04d30db2a7b8b9e40c", "shared_library": false, "unvendored_tests": false, "version": "5.1.1"}, "demes": {"depends": ["attrs", "ruamel.yaml"], "file_name": "demes-0.2.3-py3-none-any.whl", "imports": ["demes"], "install_dir": "site", "name": "demes", "package_type": "package", "sha256": "ecfc0f01c54334c98b3d9087fe908adc7c9dda96b9e1fddbb004cb26d6082974", "shared_library": false, "unvendored_tests": false, "version": "0.2.3"}, "deprecation": {"depends": ["packaging"], "file_name": "deprecation-2.1.0-py2.py3-none-any.whl", "imports": ["deprecation"], "install_dir": "site", "name": "deprecation", "package_type": "package", "sha256": "9fc563a05b74902f74b45a7fcfb64d001a4a659fbb4ebc4aa234e9c2bc4a9a0d", "shared_library": false, "unvendored_tests": false, "version": "2.1.0"}, "distlib": {"depends": [], "file_name": "distlib-0.3.8-py2.py3-none-any.whl", "imports": ["distlib"], "install_dir": "site", "name": "distlib", "package_type": "package", "sha256": "6d8068145cd8d97829edebe65f5afeecf047300950c4cce35b5038c5d3d71ca3", "shared_library": false, "unvendored_tests": false, "version": "0.3.8"}, "docutils": {"depends": [], "file_name": "docutils-0.20.1-py3-none-any.whl", "imports": ["docutils"], "install_dir": "site", "name": "docutils", "package_type": "package", "sha256": "293b0abcebc434d86567943fc4ccb97b682f3362e73711f957a8492435f790d1", "shared_library": false, "unvendored_tests": false, "version": "0.20.1"}, "ewah-bool-utils": {"depends": [], "file_name": "ewah_bool_utils-1.1.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["ewah_bool_utils"], "install_dir": "site", "name": "ewah_bool_utils", "package_type": "package", "sha256": "d2d4c31f80034f4144c42a6ec6e481bc49aa25a941da51edb6eee91e8b7395dc", "shared_library": false, "unvendored_tests": false, "version": "1.1.0"}, "exceptiongroup": {"depends": [], "file_name": "exceptiongroup-1.2.0-py3-none-any.whl", "imports": ["exceptiongroup"], "install_dir": "site", "name": "exceptiongroup", "package_type": "package", "sha256": "caa5705baa9b3553dd8eb51860782583758135c0b882d295c7aa3dc5f1939a6a", "shared_library": false, "unvendored_tests": false, "version": "1.2.0"}, "executing": {"depends": [], "file_name": "executing-2.0.1-py2.py3-none-any.whl", "imports": ["executing"], "install_dir": "site", "name": "executing", "package_type": "package", "sha256": "d57223c2835026d38524d35f42b163cb2b4ad5892dc145d39b057879acc45854", "shared_library": false, "unvendored_tests": false, "version": "2.0.1"}, "fastparquet": {"depends": ["cramjam", "numpy", "pandas", "fsspec", "packaging"], "file_name": "fastparquet-2023.7.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["fastparquet"], "install_dir": "site", "name": "fastparquet", "package_type": "package", "sha256": "628c5f79f8f2040d1ea82cb63736764ac45310c8eeb9e3d2f1a80cf48e70e790", "shared_library": false, "unvendored_tests": false, "version": "2023.7.0"}, "fiona": {"depends": ["attrs", "certifi", "setuptools", "six", "click", "cligj"], "file_name": "fiona-1.9.5-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["fiona"], "install_dir": "site", "name": "fiona", "package_type": "package", "sha256": "2dcbbbe382a229343fc859e9184394038537e37c7af7c3ca0f4914480d208ecd", "shared_library": false, "unvendored_tests": true, "version": "1.9.5"}, "fiona-tests": {"depends": ["fiona"], "file_name": "fiona-tests.tar", "imports": [], "install_dir": "site", "name": "fiona-tests", "package_type": "package", "sha256": "0ca63edd0b547cce3356c135dea9269c3a4c44cb7ee717e68b2c109e4eaee256", "shared_library": false, "unvendored_tests": false, "version": "1.9.5"}, "fonttools": {"depends": [], "file_name": "fonttools-4.48.1-py3-none-any.whl", "imports": ["fontTools"], "install_dir": "site", "name": "fonttools", "package_type": "package", "sha256": "20a70e7c57e1adc38a9d415feb5d4d545c290a388c4df23488bd91781aa2b5b9", "shared_library": false, "unvendored_tests": false, "version": "4.48.1"}, "fpcast-test": {"depends": [], "file_name": "fpcast_test-0.1.1-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["fpcast_test"], "install_dir": "site", "name": "fpcast-test", "package_type": "package", "sha256": "460541554fffa35b520af065e1dff6b469c2512e369eaf015447fb0a37eb5f64", "shared_library": false, "unvendored_tests": false, "version": "0.1.1"}, "freesasa": {"depends": [], "file_name": "freesasa-2.2.1-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["freesasa"], "install_dir": "site", "name": "freesasa", "package_type": "package", "sha256": "e0d49a278bc371390f90f29db1e7e2f631cabe58abdc6a015db628aca2c40572", "shared_library": false, "unvendored_tests": false, "version": "2.2.1"}, "frozenlist": {"depends": [], "file_name": "frozenlist-1.4.1-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["frozenlist"], "install_dir": "site", "name": "frozenlist", "package_type": "package", "sha256": "ec83bbb41182662dc1fa0ad7ed778b8fb9fc29fdc6c90db399789dca4a230ba9", "shared_library": false, "unvendored_tests": false, "version": "1.4.1"}, "fsspec": {"depends": [], "file_name": "fsspec-2024.2.0-py3-none-any.whl", "imports": ["fsspec"], "install_dir": "site", "name": "fsspec", "package_type": "package", "sha256": "cf993095ae216bd73eb333ab2bde57a720824a7800cea65ab265d691261bd0d6", "shared_library": false, "unvendored_tests": true, "version": "2024.2.0"}, "fsspec-tests": {"depends": ["fsspec"], "file_name": "fsspec-tests.tar", "imports": [], "install_dir": "site", "name": "fsspec-tests", "package_type": "package", "sha256": "e488900ed55f436781d8800a61b9adaf246debc1a284d2be95a71ca6de80a3a2", "shared_library": false, "unvendored_tests": false, "version": "2024.2.0"}, "future": {"depends": [], "file_name": "future-0.18.3-py3-none-any.whl", "imports": ["future"], "install_dir": "site", "name": "future", "package_type": "package", "sha256": "085fdc62c3d3a4fb3ea42fc7100b3c09139727ef02d0775dc4ecf236485205e8", "shared_library": false, "unvendored_tests": true, "version": "0.18.3"}, "future-tests": {"depends": ["future"], "file_name": "future-tests.tar", "imports": [], "install_dir": "site", "name": "future-tests", "package_type": "package", "sha256": "0a2daef7041d2d897c8cd6a6b65134c68c056c1b075b96607a5fdcc2c6841621", "shared_library": false, "unvendored_tests": false, "version": "0.18.3"}, "galpy": {"depends": ["numpy", "scipy", "matplotlib", "astropy", "future", "setuptools"], "file_name": "galpy-1.9.1-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["galpy"], "install_dir": "site", "name": "galpy", "package_type": "package", "sha256": "2a16aa39ae2cb66243b3767c7ffd3d9efed286928ca2532f9a62bc7d64085609", "shared_library": false, "unvendored_tests": false, "version": "1.9.1"}, "gdal": {"depends": ["geos"], "file_name": "gdal-3.8.3.zip", "imports": [], "install_dir": "dynlib", "name": "gdal", "package_type": "shared_library", "sha256": "50131f078966c2bd04d56381173bf49f8de3b17c2a82b76990e6adc8cfc641bc", "shared_library": true, "unvendored_tests": false, "version": "3.8.3"}, "gensim": {"depends": ["numpy", "scipy", "six", "smart_open"], "file_name": "gensim-4.3.2-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["gensim"], "install_dir": "site", "name": "gensim", "package_type": "package", "sha256": "f40c9b9d1979fa0c2a8f76841a5de71bdc1b77b3b6c4a4bf9dad4de2717e0f46", "shared_library": false, "unvendored_tests": true, "version": "4.3.2"}, "gensim-tests": {"depends": ["gensim"], "file_name": "gensim-tests.tar", "imports": [], "install_dir": "site", "name": "gensim-tests", "package_type": "package", "sha256": "3c9a861f059013864307ce9d0298bfcdc2d5ba686de78240ceec1ebead40004c", "shared_library": false, "unvendored_tests": false, "version": "4.3.2"}, "geopandas": {"depends": ["shapely", "fiona", "pyproj", "packaging", "pandas"], "file_name": "geopandas-0.14.3-py3-none-any.whl", "imports": ["geopandas"], "install_dir": "site", "name": "geopandas", "package_type": "package", "sha256": "1af6d2f71d703bf55e77077ea64db2bb2127a3f945cfd173326bbcf16d746ca0", "shared_library": false, "unvendored_tests": true, "version": "0.14.3"}, "geopandas-tests": {"depends": ["geopandas"], "file_name": "geopandas-tests.tar", "imports": [], "install_dir": "site", "name": "geopandas-tests", "package_type": "package", "sha256": "e7f872c426632fb7c40c43dc11628a7ce9886b718589864086465c59d52466b2", "shared_library": false, "unvendored_tests": false, "version": "0.14.3"}, "geos": {"depends": [], "file_name": "geos-3.12.1.zip", "imports": [], "install_dir": "dynlib", "name": "geos", "package_type": "shared_library", "sha256": "52a1e92c2da7ab51fadfef91a2027dbcb18f430b052e5d91921936d1a72a20e8", "shared_library": true, "unvendored_tests": false, "version": "3.12.1"}, "gmpy2": {"depends": [], "file_name": "gmpy2-2.1.5-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["gmpy2"], "install_dir": "site", "name": "gmpy2", "package_type": "package", "sha256": "dcfa6c5838c0147d4f4ef5eb7bf8d5e23114f865e650d860be4919135e3fc6be", "shared_library": false, "unvendored_tests": false, "version": "2.1.5"}, "gsw": {"depends": ["numpy"], "file_name": "gsw-3.6.17-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["gsw"], "install_dir": "site", "name": "gsw", "package_type": "package", "sha256": "b740fcfe461614c6627c11121dd09909209f1e22be441ffa05ad759141b47d0a", "shared_library": false, "unvendored_tests": true, "version": "3.6.17"}, "gsw-tests": {"depends": ["gsw"], "file_name": "gsw-tests.tar", "imports": [], "install_dir": "site", "name": "gsw-tests", "package_type": "package", "sha256": "76036d67ed55b68c804d1721990d039bcb5c982fcd62ae3e8be585d3bdad30ca", "shared_library": false, "unvendored_tests": false, "version": "3.6.17"}, "h5py": {"depends": ["numpy", "pkgconfig"], "file_name": "h5py-3.10.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["h5py"], "install_dir": "site", "name": "h5py", "package_type": "package", "sha256": "a1981f0d857a19fbc948ef9fb61ac7eace5e5f7bb0f902ccc248bec5b07180b3", "shared_library": false, "unvendored_tests": true, "version": "3.10.0"}, "h5py-tests": {"depends": ["h5py"], "file_name": "h5py-tests.tar", "imports": [], "install_dir": "site", "name": "h5py-tests", "package_type": "package", "sha256": "b6dfb7c4e7ef436315966938b802cdc0644375e0e6c3de754a8bfc4afbaa1ff6", "shared_library": false, "unvendored_tests": false, "version": "3.10.0"}, "hashlib": {"depends": ["openssl"], "file_name": "hashlib-1.0.0.zip", "imports": ["_hashlib"], "install_dir": "stdlib", "name": "hashlib", "package_type": "cpython_module", "sha256": "90c7c6a99b032bcced6952c9ef15cd99d15a67f81c9ec1e50f1db82f079a7230", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "html5lib": {"depends": ["webencodings", "six"], "file_name": "html5lib-1.1-py2.py3-none-any.whl", "imports": ["html5lib"], "install_dir": "site", "name": "html5lib", "package_type": "package", "sha256": "7ef2fe9b18b47317f69b24a35130f0f539cdfd393d2d11d0a7e549ea5b9cf8ec", "shared_library": false, "unvendored_tests": false, "version": "1.1"}, "idna": {"depends": [], "file_name": "idna-3.6-py3-none-any.whl", "imports": ["idna"], "install_dir": "site", "name": "idna", "package_type": "package", "sha256": "1022eb7799406d4fd453cd0eba010a684392caaf8a07b8f6f717df2791024b35", "shared_library": false, "unvendored_tests": false, "version": "3.6"}, "igraph": {"depends": ["texttable"], "file_name": "igraph-0.11.3-cp39-abi3-emscripten_3_1_52_wasm32.whl", "imports": ["igraph"], "install_dir": "site", "name": "igraph", "package_type": "package", "sha256": "fb1603d013bd4cebefcdde5d4773badcd434b99fa8ac2005ca361646af59d249", "shared_library": false, "unvendored_tests": false, "version": "0.11.3"}, "imageio": {"depends": ["numpy", "pillow"], "file_name": "imageio-2.33.1-py3-none-any.whl", "imports": ["imageio"], "install_dir": "site", "name": "imageio", "package_type": "package", "sha256": "f1770579c6c63962524df0dd0dd0f0e6222bdb74075b69d76ffb7e4cf0663dcc", "shared_library": false, "unvendored_tests": false, "version": "2.33.1"}, "iniconfig": {"depends": [], "file_name": "iniconfig-2.0.0-py3-none-any.whl", "imports": ["iniconfig"], "install_dir": "site", "name": "iniconfig", "package_type": "package", "sha256": "9c3e40eda42f47bd18a774849a62c82efbdeadbae5c6acd36e6da166c5cbf904", "shared_library": false, "unvendored_tests": false, "version": "2.0.0"}, "ipython": {"depends": ["asttokens", "decorator", "executing", "prompt_toolkit", "pure_eval", "pygments", "six", "stack_data", "traitlets", "sqlite3", "wcwidth"], "file_name": "ipython-8.22.1-py3-none-any.whl", "imports": ["IPython"], "install_dir": "site", "name": "ipython", "package_type": "package", "sha256": "3baee0081a8d9bcf9b762a5f2969db95b02c6027947fe8c667d7bcdb76a4bd5c", "shared_library": false, "unvendored_tests": true, "version": "8.22.1"}, "ipython-tests": {"depends": ["ipython"], "file_name": "ipython-tests.tar", "imports": [], "install_dir": "site", "name": "ipython-tests", "package_type": "package", "sha256": "5e7f02452194122609dacc94a7d3532dd3bc46c6ff9898bd9344b7e39579b321", "shared_library": false, "unvendored_tests": false, "version": "8.22.1"}, "jedi": {"depends": ["parso"], "file_name": "jedi-0.19.1-py2.py3-none-any.whl", "imports": ["jedi"], "install_dir": "site", "name": "jedi", "package_type": "package", "sha256": "4ce122398f5a2ddecd34c35859c572c3da107eff6fa51034b837dc465c80b939", "shared_library": false, "unvendored_tests": true, "version": "0.19.1"}, "jedi-tests": {"depends": ["jedi"], "file_name": "jedi-tests.tar", "imports": [], "install_dir": "site", "name": "jedi-tests", "package_type": "package", "sha256": "224449fe58eced15068e3e4e1e5110c42eb27ad207f5206a94fca48acf3ba938", "shared_library": false, "unvendored_tests": false, "version": "0.19.1"}, "jinja2": {"depends": ["markupsafe"], "file_name": "Jinja2-3.1.3-py3-none-any.whl", "imports": ["jinja2"], "install_dir": "site", "name": "Jinja2", "package_type": "package", "sha256": "9f07de9723905b3347de965e6cb4ceedee94e94e8113f76085364dbaa773dc92", "shared_library": false, "unvendored_tests": false, "version": "3.1.3"}, "joblib": {"depends": [], "file_name": "joblib-1.3.2-py3-none-any.whl", "imports": ["joblib"], "install_dir": "site", "name": "joblib", "package_type": "package", "sha256": "bd05a746bf53062fb1897e07a491a6e1ad930012503a6aaf165311143c39f18f", "shared_library": false, "unvendored_tests": true, "version": "1.3.2"}, "joblib-tests": {"depends": ["joblib"], "file_name": "joblib-tests.tar", "imports": [], "install_dir": "site", "name": "joblib-tests", "package_type": "package", "sha256": "8ae17d0531d55c839591f1ea993bc216a6fde867397dd6c3ef42e5539b6de116", "shared_library": false, "unvendored_tests": false, "version": "1.3.2"}, "jsonschema": {"depends": ["attrs", "pyrsistent", "referencing", "jsonschema_specifications"], "file_name": "jsonschema-4.21.1-py3-none-any.whl", "imports": ["jsonschema"], "install_dir": "site", "name": "jsonschema", "package_type": "package", "sha256": "fe0ac2f96bc75fb06c5e8fe483a41f26f4e6602c336a8ecbe4676f16439a0c3c", "shared_library": false, "unvendored_tests": true, "version": "4.21.1"}, "jsonschema-specifications": {"depends": [], "file_name": "jsonschema_specifications-2023.12.1-py3-none-any.whl", "imports": ["jsonschema_specifications"], "install_dir": "site", "name": "jsonschema_specifications", "package_type": "package", "sha256": "91b97f9b72db3495a24c45d5fc1217848ed3849c8e5ae72d1d431b5a6167d6c9", "shared_library": false, "unvendored_tests": true, "version": "2023.12.1"}, "jsonschema-specifications-tests": {"depends": ["jsonschema_specifications"], "file_name": "jsonschema_specifications-tests.tar", "imports": [], "install_dir": "site", "name": "jsonschema_specifications-tests", "package_type": "package", "sha256": "57b73798220ab39a74f45500bbee13618b0346a0db7235f87f6cf6e15f3ab785", "shared_library": false, "unvendored_tests": false, "version": "2023.12.1"}, "jsonschema-tests": {"depends": ["jsonschema"], "file_name": "jsonschema-tests.tar", "imports": [], "install_dir": "site", "name": "jsonschema-tests", "package_type": "package", "sha256": "8ef3c89a6b6652f77955e7b20d391ad7745d4a62520e035270e595bb9d270db1", "shared_library": false, "unvendored_tests": false, "version": "4.21.1"}, "kiwisolver": {"depends": [], "file_name": "kiwisolver-1.4.5-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["kiwisolver"], "install_dir": "site", "name": "kiwisolver", "package_type": "package", "sha256": "9746b21e2cdebc7f2fbf374edee2b05c10e29610c1c1e3a323c57364ce1bc0db", "shared_library": false, "unvendored_tests": false, "version": "1.4.5"}, "lazy-loader": {"depends": [], "file_name": "lazy_loader-0.3-py3-none-any.whl", "imports": ["lazy_loader"], "install_dir": "site", "name": "lazy_loader", "package_type": "package", "sha256": "ba9d3a18e42804c83162441b8ccfab66d7bb98d0c53f93c37333da552e111dab", "shared_library": false, "unvendored_tests": true, "version": "0.3"}, "lazy-loader-tests": {"depends": ["lazy_loader"], "file_name": "lazy_loader-tests.tar", "imports": [], "install_dir": "site", "name": "lazy_loader-tests", "package_type": "package", "sha256": "6f4ff7a1ea76b97350f8250dea726a344ae964b7abdf4977615d0a3b28b610c0", "shared_library": false, "unvendored_tests": false, "version": "0.3"}, "lazy-object-proxy": {"depends": [], "file_name": "lazy_object_proxy-1.10.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["lazy_object_proxy"], "install_dir": "site", "name": "lazy-object-proxy", "package_type": "package", "sha256": "1349c10c1a67bf8190d5a3c68107dd0e9202ea0ced5a561515827a769f42a5c7", "shared_library": false, "unvendored_tests": false, "version": "1.10.0"}, "libhdf5": {"depends": [], "file_name": "libhdf5-1.12.1.zip", "imports": [], "install_dir": "dynlib", "name": "libhdf5", "package_type": "shared_library", "sha256": "bb047b37cc2655358c5510ced778c2a36ce01b0d0fa8b80560c8267925c6f392", "shared_library": true, "unvendored_tests": false, "version": "1.12.1"}, "libheif": {"depends": [], "file_name": "libheif-1.12.0.zip", "imports": [], "install_dir": "dynlib", "name": "libheif", "package_type": "shared_library", "sha256": "872d3fc555d49d7350ec60c06be4cf7fc20116e4629957868841ad61cfcb2725", "shared_library": true, "unvendored_tests": false, "version": "1.12.0"}, "libmagic": {"depends": [], "file_name": "libmagic-5.42.zip", "imports": [], "install_dir": "dynlib", "name": "libmagic", "package_type": "shared_library", "sha256": "bd9a691b1f3a8ee0e3708b33077872371bd2f8d9f89689a9aec135338c49e924", "shared_library": true, "unvendored_tests": false, "version": "5.42"}, "libnetcdf": {"depends": [], "file_name": "libnetcdf-4.9.2.zip", "imports": [], "install_dir": "dynlib", "name": "libnetcdf", "package_type": "shared_library", "sha256": "2533def5df8431717be3c26601044c3cad9e76ccb465dfeffc45518c216c780f", "shared_library": true, "unvendored_tests": false, "version": "4.9.2"}, "lightgbm": {"depends": ["numpy", "scipy", "scikit-learn"], "file_name": "lightgbm-3.3.5-py3-none-any.whl", "imports": ["lightgbm"], "install_dir": "site", "name": "lightgbm", "package_type": "package", "sha256": "acebbbace567f575b371dc7372414e21c8cac9cf8842597cd4bfb7125fa2efb0", "shared_library": false, "unvendored_tests": false, "version": "3.3.5"}, "logbook": {"depends": ["ssl"], "file_name": "Logbook-1.7.0.post0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["logbook"], "install_dir": "site", "name": "logbook", "package_type": "package", "sha256": "454bda2e49f2df4a272577b9807c54c682dca0db375ba9ed7e2a6a69aece20cd", "shared_library": false, "unvendored_tests": false, "version": "1.7.0.post0"}, "lxml": {"depends": [], "file_name": "lxml-5.1.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["lxml"], "install_dir": "site", "name": "lxml", "package_type": "package", "sha256": "25b3434ce5f13f5f7431ecf45c864a94338e81b10ea44b39e482f9c031a511c2", "shared_library": false, "unvendored_tests": false, "version": "5.1.0"}, "lzma": {"depends": [], "file_name": "lzma-1.0.0.zip", "imports": ["lzma", "_lzma"], "install_dir": "stdlib", "name": "lzma", "package_type": "cpython_module", "sha256": "029f484281efb1c61a538133e27ba01378efb6728c136fd5be597c85b7202b7a", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "markupsafe": {"depends": [], "file_name": "MarkupSafe-2.1.5-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["markupsafe"], "install_dir": "site", "name": "MarkupSafe", "package_type": "package", "sha256": "5cf3f52e4a21f6d22771106332bd1af5ea1a01f9d924960c6027facb6b3d1a98", "shared_library": false, "unvendored_tests": false, "version": "2.1.5"}, "matplotlib": {"depends": ["cycler", "fonttools", "kiwisolver", "numpy", "packaging", "pillow", "pyparsing", "python-dateutil", "pytz", "matplotlib-pyodide"], "file_name": "matplotlib-3.5.2-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["pylab", "mpl_toolkits", "matplotlib"], "install_dir": "site", "name": "matplotlib", "package_type": "package", "sha256": "b9c2c8977f5de335baaac79fa8c86f17d78523956399d0485b0d7ca3d1871abb", "shared_library": false, "unvendored_tests": true, "version": "3.5.2"}, "matplotlib-pyodide": {"depends": [], "file_name": "matplotlib_pyodide-0.2.1-py3-none-any.whl", "imports": ["matplotlib_pyodide"], "install_dir": "site", "name": "matplotlib-pyodide", "package_type": "package", "sha256": "cfa7923eef3fab824afa8d1603992e45a25b827aa438d210e17e29d08f932001", "shared_library": false, "unvendored_tests": false, "version": "0.2.1"}, "matplotlib-tests": {"depends": ["matplotlib"], "file_name": "matplotlib-tests.tar", "imports": [], "install_dir": "site", "name": "matplotlib-tests", "package_type": "package", "sha256": "611a07d21f10a0a4eaa53cfa92a07c55ffb59d2a123a320910487ade00b79245", "shared_library": false, "unvendored_tests": false, "version": "3.5.2"}, "memory-allocator": {"depends": [], "file_name": "memory_allocator-0.1.3-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["memory_allocator"], "install_dir": "site", "name": "memory-allocator", "package_type": "package", "sha256": "da13134b9294c33f49c703538ebd828c25acda9644c5d489fae7f9b19bbce09b", "shared_library": false, "unvendored_tests": false, "version": "0.1.3"}, "micropip": {"depends": ["packaging"], "file_name": "micropip-0.6.0-py3-none-any.whl", "imports": ["micropip"], "install_dir": "site", "name": "micropip", "package_type": "package", "sha256": "8b7c25660eebdc2c81f14f1912962a81babaf1cf47f0e8749fafe70cc11acf4c", "shared_library": false, "unvendored_tests": false, "version": "0.6.0"}, "mne": {"depends": ["numpy", "scipy", "setuptools", "decorator", "lazy_loader", "packaging"], "file_name": "mne-1.6.1-py3-none-any.whl", "imports": ["mne"], "install_dir": "site", "name": "mne", "package_type": "package", "sha256": "fd84473534c22fbfeebc752031cbbb67690814d875aa872294d07ad152372bd5", "shared_library": false, "unvendored_tests": true, "version": "1.6.1"}, "mne-tests": {"depends": ["mne"], "file_name": "mne-tests.tar", "imports": [], "install_dir": "site", "name": "mne-tests", "package_type": "package", "sha256": "4125bfd4ef06ac20d8179f48f3db4c5edb87641aedd6d78a3e71088a42004a89", "shared_library": false, "unvendored_tests": false, "version": "1.6.1"}, "more-itertools": {"depends": [], "file_name": "more_itertools-10.2.0-py3-none-any.whl", "imports": ["more_itertools"], "install_dir": "site", "name": "more-itertools", "package_type": "package", "sha256": "b14a10f0e578cc63ab4898958152ffe31d49d8346cc8a95c169de780dcf6c64b", "shared_library": false, "unvendored_tests": false, "version": "10.2.0"}, "mpmath": {"depends": [], "file_name": "mpmath-1.3.0-py3-none-any.whl", "imports": ["mpmath"], "install_dir": "site", "name": "mpmath", "package_type": "package", "sha256": "60c93afc9d22c283d323d0abf1e8f65d8d00bfc2ddb951112a3dbc6399984620", "shared_library": false, "unvendored_tests": true, "version": "1.3.0"}, "mpmath-tests": {"depends": ["mpmath"], "file_name": "mpmath-tests.tar", "imports": [], "install_dir": "site", "name": "mpmath-tests", "package_type": "package", "sha256": "a650ad6c38cbea2949da30768e70c8c66d30abfaaff8627e7e515adda6573372", "shared_library": false, "unvendored_tests": false, "version": "1.3.0"}, "msgpack": {"depends": [], "file_name": "msgpack-1.0.7-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["msgpack"], "install_dir": "site", "name": "msgpack", "package_type": "package", "sha256": "fc17b195db033ff5af63821764be38e9291434373e5307001d285671e932455c", "shared_library": false, "unvendored_tests": false, "version": "1.0.7"}, "msgspec": {"depends": [], "file_name": "msgspec-0.18.6-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["msgspec"], "install_dir": "site", "name": "msgspec", "package_type": "package", "sha256": "468c5bfdc7a15ff05b0fca0c363d827fc9235aa3becfb20043c15efb4de0ea77", "shared_library": false, "unvendored_tests": false, "version": "0.18.6"}, "msprime": {"depends": ["numpy", "newick", "tskit", "demes", "rpds-py"], "file_name": "msprime-1.3.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["msprime"], "install_dir": "site", "name": "msprime", "package_type": "package", "sha256": "41b3a60dbc154f0b94f3ce3fd2d4eee9696b9f5fffc6b12504ad204f228447b4", "shared_library": false, "unvendored_tests": false, "version": "1.3.0"}, "multidict": {"depends": [], "file_name": "multidict-6.0.5-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["multidict"], "install_dir": "site", "name": "multidict", "package_type": "package", "sha256": "8076385fac9d043619f1e95691406813a9b662c1f6c69f3e724119863d7f675e", "shared_library": false, "unvendored_tests": false, "version": "6.0.5"}, "munch": {"depends": ["setuptools", "six"], "file_name": "munch-4.0.0-py2.py3-none-any.whl", "imports": ["munch"], "install_dir": "site", "name": "munch", "package_type": "package", "sha256": "ceacd51dba3138bfc14b9bff6915a41263b8018ce48d1a355b15968bf04dc94b", "shared_library": false, "unvendored_tests": false, "version": "4.0.0"}, "mypy": {"depends": [], "file_name": "mypy-1.8.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["mypyc", "mypy"], "install_dir": "site", "name": "mypy", "package_type": "package", "sha256": "9b7f105f4de7502208e6b6072b9c808ea9cabe1bee06b32ca0c8ce0380532853", "shared_library": false, "unvendored_tests": true, "version": "1.8.0"}, "mypy-tests": {"depends": ["mypy"], "file_name": "mypy-tests.tar", "imports": [], "install_dir": "site", "name": "mypy-tests", "package_type": "package", "sha256": "acf70d3cc6bebccb6f82f5416208ebb45699d2421441b975b3e9f109366e3a91", "shared_library": false, "unvendored_tests": false, "version": "1.8.0"}, "netcdf4": {"depends": ["numpy", "packaging", "h5py", "cftime", "certifi"], "file_name": "netCDF4-1.6.5-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["netCDF4"], "install_dir": "site", "name": "netcdf4", "package_type": "package", "sha256": "985b8f21aa400632ac6f542b50ff20a03cccb7ab987a13f07faf38c74d23e481", "shared_library": false, "unvendored_tests": false, "version": "1.6.5"}, "networkx": {"depends": ["decorator", "setuptools", "matplotlib", "numpy"], "file_name": "networkx-3.2.1-py3-none-any.whl", "imports": ["networkx"], "install_dir": "site", "name": "networkx", "package_type": "package", "sha256": "e5bb55eda49ecc66c49eeb722ca6a08a30a38ef29c9ddb91f61bfa12c0782b94", "shared_library": false, "unvendored_tests": true, "version": "3.2.1"}, "networkx-tests": {"depends": ["networkx"], "file_name": "networkx-tests.tar", "imports": [], "install_dir": "site", "name": "networkx-tests", "package_type": "package", "sha256": "f4117962d9486663642848fd8702695e610a27fad5c5085a00403e06f0fa2eff", "shared_library": false, "unvendored_tests": false, "version": "3.2.1"}, "newick": {"depends": [], "file_name": "newick-1.9.0-py2.py3-none-any.whl", "imports": ["newick"], "install_dir": "site", "name": "newick", "package_type": "package", "sha256": "58f27a662a16d9f23d59211bf1032692a2437a2a0c7ff45cd503bb3bf2908860", "shared_library": false, "unvendored_tests": false, "version": "1.9.0"}, "nh3": {"depends": [], "file_name": "nh3-0.2.15-cp37-abi3-emscripten_3_1_52_wasm32.whl", "imports": ["nh3"], "install_dir": "site", "name": "nh3", "package_type": "package", "sha256": "4e32fcfe4ab224ca5ddf5f78bca6f5e25a5aad9e3c863374b4f0c0a5aaac0863", "shared_library": false, "unvendored_tests": false, "version": "0.2.15"}, "nlopt": {"depends": ["numpy"], "file_name": "nlopt-2.7.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["nlopt"], "install_dir": "site", "name": "nlopt", "package_type": "package", "sha256": "e29d277152a2e090ddc969b3701a03dfb6f6c8775d3d6e11409ee40a57da5e7c", "shared_library": false, "unvendored_tests": false, "version": "2.7.0"}, "nltk": {"depends": ["regex", "sqlite3"], "file_name": "nltk-3.8.1-py3-none-any.whl", "imports": ["nltk"], "install_dir": "site", "name": "nltk", "package_type": "package", "sha256": "3c861edf8d0052f97d6772dbe568699bfc6ffcfe9224facc47f5aa76d1998a73", "shared_library": false, "unvendored_tests": true, "version": "3.8.1"}, "nltk-tests": {"depends": ["nltk"], "file_name": "nltk-tests.tar", "imports": [], "install_dir": "site", "name": "nltk-tests", "package_type": "package", "sha256": "0e8685c1efb1c812e964855a6afca68ad6fd95e6d94ab0552fd508bf61533053", "shared_library": false, "unvendored_tests": false, "version": "3.8.1"}, "numcodecs": {"depends": ["numpy", "msgpack"], "file_name": "numcodecs-0.11.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["numcodecs"], "install_dir": "site", "name": "numcodecs", "package_type": "package", "sha256": "3bd339782800b2a887b65dac7d9e048197f7070421f8d636ebb7f065646112f4", "shared_library": false, "unvendored_tests": true, "version": "0.11.0"}, "numcodecs-tests": {"depends": ["numcodecs"], "file_name": "numcodecs-tests.tar", "imports": [], "install_dir": "site", "name": "numcodecs-tests", "package_type": "package", "sha256": "b45cca0663fd1a1a88034144628212f6e12ef517673afac88da87d5306804797", "shared_library": false, "unvendored_tests": false, "version": "0.11.0"}, "numpy": {"depends": [], "file_name": "numpy-1.26.4-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["numpy"], "install_dir": "site", "name": "numpy", "package_type": "package", "sha256": "3fd53f41d237dd9c4abd53efda81b557eeefa54e63d6d3daf2924b5bfc0fac4b", "shared_library": false, "unvendored_tests": true, "version": "1.26.4"}, "numpy-tests": {"depends": ["numpy"], "file_name": "numpy-tests.tar", "imports": [], "install_dir": "site", "name": "numpy-tests", "package_type": "package", "sha256": "bef23b6e428e3373adfa33970400e011e85ac0f45feeacf9d56a86e405c5ed92", "shared_library": false, "unvendored_tests": false, "version": "1.26.4"}, "openblas": {"depends": [], "file_name": "openblas-0.3.26.zip", "imports": [], "install_dir": "dynlib", "name": "openblas", "package_type": "shared_library", "sha256": "f18e7653861f0fefb670a4b16f2b2f6484db78da34e0fb8d0d83c23a501b3405", "shared_library": true, "unvendored_tests": false, "version": "0.3.26"}, "opencv-python": {"depends": ["numpy"], "file_name": "opencv_python-4.9.0.80-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["cv2"], "install_dir": "site", "name": "opencv-python", "package_type": "package", "sha256": "952d119f4f8500052ff7bf06ca6c0e37e1c77d404c67ff1b22961584aca163d7", "shared_library": false, "unvendored_tests": false, "version": "4.9.0.80"}, "openssl": {"depends": [], "file_name": "openssl-1.1.1n.zip", "imports": [], "install_dir": "dynlib", "name": "openssl", "package_type": "shared_library", "sha256": "fe2ddb01fafd492b30badfcb687742a4cd2a6af0c97a6c3c206cff1d71ba44df", "shared_library": true, "unvendored_tests": false, "version": "1.1.1n"}, "optlang": {"depends": ["sympy", "six", "swiglpk"], "file_name": "optlang-1.8.1-py2.py3-none-any.whl", "imports": ["optlang"], "install_dir": "site", "name": "optlang", "package_type": "package", "sha256": "403585bf70bc9a17dfe196c547e53f3acf4b1dde3450fa3c8a143c65e59f6b19", "shared_library": false, "unvendored_tests": true, "version": "1.8.1"}, "optlang-tests": {"depends": ["optlang"], "file_name": "optlang-tests.tar", "imports": [], "install_dir": "site", "name": "optlang-tests", "package_type": "package", "sha256": "1983ca8e78e05eb21b25170064a872ea1ca6971830af9b79356fc8a6078ad989", "shared_library": false, "unvendored_tests": false, "version": "1.8.1"}, "orjson": {"depends": [], "file_name": "orjson-3.9.13-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["orjson"], "install_dir": "site", "name": "orjson", "package_type": "package", "sha256": "c083d8cdfe85e4187a47f7300a27b3898eb224d0670ad0121937bedaf8321447", "shared_library": false, "unvendored_tests": false, "version": "3.9.13"}, "packaging": {"depends": [], "file_name": "packaging-23.2-py3-none-any.whl", "imports": ["packaging"], "install_dir": "site", "name": "packaging", "package_type": "package", "sha256": "0da39c6b7861c59ac9498fcae4780d19f58e32246dee55f702dd375947cd0842", "shared_library": false, "unvendored_tests": false, "version": "23.2"}, "pandas": {"depends": ["numpy", "python-dateutil", "pytz"], "file_name": "pandas-2.2.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["pandas"], "install_dir": "site", "name": "pandas", "package_type": "package", "sha256": "abf3e5436607c3a9edcbcf90d8e576dddd5d36aa3a551c693e3dbc8d10960249", "shared_library": false, "unvendored_tests": true, "version": "2.2.0"}, "pandas-tests": {"depends": ["pandas"], "file_name": "pandas-tests.tar", "imports": [], "install_dir": "site", "name": "pandas-tests", "package_type": "package", "sha256": "ad5b0cb6aa2c4f3fb8dad959392ebb1de763a2edb5fa105b54c5f40b7589e360", "shared_library": false, "unvendored_tests": false, "version": "2.2.0"}, "parso": {"depends": [], "file_name": "parso-0.8.3-py2.py3-none-any.whl", "imports": ["parso"], "install_dir": "site", "name": "parso", "package_type": "package", "sha256": "08a0dcf20cda432ea6307ea52cf2a5a5ca71b55c21f0ab48de5ffd74ad61e33d", "shared_library": false, "unvendored_tests": false, "version": "0.8.3"}, "patsy": {"depends": ["numpy", "six"], "file_name": "patsy-0.5.6-py2.py3-none-any.whl", "imports": ["patsy"], "install_dir": "site", "name": "patsy", "package_type": "package", "sha256": "58882a5e2c44c77605a39c9d748f5fcd14eb40b83c6985ebab7407ece9c4dfcc", "shared_library": false, "unvendored_tests": true, "version": "0.5.6"}, "patsy-tests": {"depends": ["patsy"], "file_name": "patsy-tests.tar", "imports": [], "install_dir": "site", "name": "patsy-tests", "package_type": "package", "sha256": "dfb530d8c73dbbd5486f2fe1e72b2f81154181fa56fea0b0901178fcea602de3", "shared_library": false, "unvendored_tests": false, "version": "0.5.6"}, "peewee": {"depends": ["sqlite3", "cffi"], "file_name": "peewee-3.17.1-py3-none-any.whl", "imports": ["peewee"], "install_dir": "site", "name": "peewee", "package_type": "package", "sha256": "59ffa3410a9c33f974ddfd391271cc4ceb390808b77943cccb80909ac3905c5c", "shared_library": false, "unvendored_tests": true, "version": "3.17.1"}, "peewee-tests": {"depends": ["peewee"], "file_name": "peewee-tests.tar", "imports": [], "install_dir": "site", "name": "peewee-tests", "package_type": "package", "sha256": "9eb359f243c061f1060cb530cad02b3596e7cf730c6564978e15fe14d27a18bd", "shared_library": false, "unvendored_tests": false, "version": "3.17.1"}, "pillow": {"depends": [], "file_name": "pillow-10.2.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["PIL"], "install_dir": "site", "name": "Pillow", "package_type": "package", "sha256": "2373b09de0309634a15352c1cc6f9c675f93348e60654f76f780b2f304116a0c", "shared_library": false, "unvendored_tests": false, "version": "10.2.0"}, "pillow-heif": {"depends": ["cffi", "pillow", "libheif"], "file_name": "pillow_heif-0.8.0-cp36-abi3-emscripten_3_1_52_wasm32.whl", "imports": ["pillow_heif"], "install_dir": "site", "name": "pillow_heif", "package_type": "package", "sha256": "25abb7443ead8904eab0fd3d1f634bf0951d4955e27953cdab0f0817533a0f57", "shared_library": false, "unvendored_tests": false, "version": "0.8.0"}, "pkgconfig": {"depends": [], "file_name": "pkgconfig-1.5.5-py3-none-any.whl", "imports": ["pkgconfig"], "install_dir": "site", "name": "pkgconfig", "package_type": "package", "sha256": "8d6eadec6149fe32d264141e13a87e3e302c5cf9e407adc590a2b5d47cc54ade", "shared_library": false, "unvendored_tests": false, "version": "1.5.5"}, "pluggy": {"depends": [], "file_name": "pluggy-1.4.0-py3-none-any.whl", "imports": ["pluggy"], "install_dir": "site", "name": "pluggy", "package_type": "package", "sha256": "8235d2f43f6718b8729985053cd02de3ae6a2abdc28e0e571dc44d2707a07548", "shared_library": false, "unvendored_tests": false, "version": "1.4.0"}, "pplpy": {"depends": ["gmpy2", "cysignals"], "file_name": "pplpy-0.8.9-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["ppl"], "install_dir": "site", "name": "pplpy", "package_type": "package", "sha256": "cb014b8904a32fd28a08377234b57467b6e50941dde787ac2e16ac123aeec9b3", "shared_library": false, "unvendored_tests": false, "version": "0.8.9"}, "primecountpy": {"depends": ["cysignals"], "file_name": "primecountpy-0.1.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["primecountpy"], "install_dir": "site", "name": "primecountpy", "package_type": "package", "sha256": "645bd656a79ceb1f2001eef226f6e4eda60ed9f8ba356d9c903806f952e55be4", "shared_library": false, "unvendored_tests": false, "version": "0.1.0"}, "prompt-toolkit": {"depends": [], "file_name": "prompt_toolkit-3.0.43-py3-none-any.whl", "imports": ["prompt_toolkit"], "install_dir": "site", "name": "prompt_toolkit", "package_type": "package", "sha256": "1c050e9f07dcbd214013ca0a67da82d75cd04db6d6cf2e898733c83f4b9c011a", "shared_library": false, "unvendored_tests": false, "version": "3.0.43"}, "protobuf": {"depends": [], "file_name": "protobuf-4.24.4-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["google"], "install_dir": "site", "name": "protobuf", "package_type": "package", "sha256": "52a1637d79188562f60fcd5a19d4d7d9f6633c3ba6f7e880dae84025531247af", "shared_library": false, "unvendored_tests": false, "version": "4.24.4"}, "pure-eval": {"depends": [], "file_name": "pure_eval-0.2.2-py3-none-any.whl", "imports": ["pure_eval"], "install_dir": "site", "name": "pure_eval", "package_type": "package", "sha256": "479deabc216bc3baa6ccde8daa4284646a0e56afdb58dadb125513e300d9d223", "shared_library": false, "unvendored_tests": false, "version": "0.2.2"}, "py": {"depends": [], "file_name": "py-1.11.0-py2.py3-none-any.whl", "imports": ["py"], "install_dir": "site", "name": "py", "package_type": "package", "sha256": "657bc489664a03c318504981049e3e5ec91541be27379948719005b84d868698", "shared_library": false, "unvendored_tests": false, "version": "1.11.0"}, "pyclipper": {"depends": [], "file_name": "pyclipper-1.3.0.post5-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["pyclipper"], "install_dir": "site", "name": "pyclipper", "package_type": "package", "sha256": "2d522a593766bd77761d6c7c0e94c2f37e16224a1904c04ce639fb7a6910e479", "shared_library": false, "unvendored_tests": false, "version": "1.3.0.post5"}, "pycparser": {"depends": [], "file_name": "pycparser-2.21-py2.py3-none-any.whl", "imports": ["pycparser"], "install_dir": "site", "name": "pycparser", "package_type": "package", "sha256": "9d4d1aa378d96654b45e0354d825f86046350c5fae5c09bdc8d167e9bfae2196", "shared_library": false, "unvendored_tests": false, "version": "2.21"}, "pycryptodome": {"depends": [], "file_name": "pycryptodome-3.20.0-cp35-abi3-emscripten_3_1_52_wasm32.whl", "imports": ["Crypto"], "install_dir": "site", "name": "pycryptodome", "package_type": "package", "sha256": "6835986811a7aef31ae5c80d24c13a6884e40cc8f07b017ac1b371b6d07e39ab", "shared_library": false, "unvendored_tests": true, "version": "3.20.0"}, "pycryptodome-tests": {"depends": ["pycryptodome"], "file_name": "pycryptodome-tests.tar", "imports": [], "install_dir": "site", "name": "pycryptodome-tests", "package_type": "package", "sha256": "8d4f55577b15618eaa43c68db30352c0f47cf4b2010bfd02317b6625c9b17d47", "shared_library": false, "unvendored_tests": false, "version": "3.20.0"}, "pydantic": {"depends": ["typing-extensions", "pydantic_core", "annotated-types"], "file_name": "pydantic-2.6.1-py3-none-any.whl", "imports": ["pydantic"], "install_dir": "site", "name": "pydantic", "package_type": "package", "sha256": "2c7a8f05f2b80e73170cce6e806903db3abf503f4f69d242677e5ac94982b040", "shared_library": false, "unvendored_tests": false, "version": "2.6.1"}, "pydantic-core": {"depends": [], "file_name": "pydantic_core-2.16.2-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["pydantic_core"], "install_dir": "site", "name": "pydantic_core", "package_type": "package", "sha256": "dc5db18c421ebf09392fe7f00deb3839fbb45b53627110ca20a3dbdcf3d818c0", "shared_library": false, "unvendored_tests": false, "version": "2.16.2"}, "pydecimal": {"depends": [], "file_name": "pydecimal-1.0.0.zip", "imports": ["_pydecimal"], "install_dir": "stdlib", "name": "pydecimal", "package_type": "cpython_module", "sha256": "ab09bc50ce74d5b0b272bf6b4327b7a60a82c099690470ac05081cd74ba9bc58", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "pydoc-data": {"depends": [], "file_name": "pydoc_data-1.0.0.zip", "imports": ["pydoc_data"], "install_dir": "stdlib", "name": "pydoc_data", "package_type": "cpython_module", "sha256": "fa064fec59d268ffb00817b3d2b343f15aab2e3de0919d939d1cb22da6b1b766", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "pyerfa": {"depends": ["numpy"], "file_name": "pyerfa-2.0.1.1-cp39-abi3-emscripten_3_1_52_wasm32.whl", "imports": ["erfa"], "install_dir": "site", "name": "pyerfa", "package_type": "package", "sha256": "a37085f46e573f60e9e96ff518efcf42dbf5d941bdd2b052eab6ad496737d2c2", "shared_library": false, "unvendored_tests": true, "version": "2.0.1.1"}, "pyerfa-tests": {"depends": ["pyerfa"], "file_name": "pyerfa-tests.tar", "imports": [], "install_dir": "site", "name": "pyerfa-tests", "package_type": "package", "sha256": "59fa50111142a413d8fafc4701f24f507965f17327145c821bf854e9de2fa262", "shared_library": false, "unvendored_tests": false, "version": "2.0.1.1"}, "pygments": {"depends": [], "file_name": "pygments-2.17.2-py3-none-any.whl", "imports": ["pygments"], "install_dir": "site", "name": "Pygments", "package_type": "package", "sha256": "c9ec2f8189b7bda1ecd54fc0358595db0bb5aee643ab7a2091b14138f5668abf", "shared_library": false, "unvendored_tests": false, "version": "2.17.2"}, "pyheif": {"depends": ["cffi"], "file_name": "pyheif-0.7.1-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["pyheif"], "install_dir": "site", "name": "pyheif", "package_type": "package", "sha256": "983ebf39fbd335d83c3faabcef478e733dbc891176325b0273e480de2cd359c2", "shared_library": false, "unvendored_tests": false, "version": "0.7.1"}, "pyinstrument": {"depends": [], "file_name": "pyinstrument-4.4.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["pyinstrument"], "install_dir": "site", "name": "pyinstrument", "package_type": "package", "sha256": "6cd7aa9ae7170f21b887ff140c6f03e80b124ebe284be8330dc51bf07cf84696", "shared_library": false, "unvendored_tests": false, "version": "4.4.0"}, "pynacl": {"depends": ["cffi"], "file_name": "PyNaCl-1.5.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["nacl"], "install_dir": "site", "name": "pynacl", "package_type": "package", "sha256": "e84adab49224b699f0b16d45a68ca9a6ec07efa135a0f54801c4d484dc2503a9", "shared_library": false, "unvendored_tests": false, "version": "1.5.0"}, "pyodide-http": {"depends": [], "file_name": "pyodide_http-0.2.1-py3-none-any.whl", "imports": ["pyodide_http"], "install_dir": "site", "name": "pyodide-http", "package_type": "package", "sha256": "fb2cd5c00fc1e0c1540c717ee881a9b53e00b380111106de6e3b17f69b9aaea3", "shared_library": false, "unvendored_tests": false, "version": "0.2.1"}, "pyparsing": {"depends": [], "file_name": "pyparsing-3.1.1-py3-none-any.whl", "imports": ["pyparsing"], "install_dir": "site", "name": "pyparsing", "package_type": "package", "sha256": "f84b225043311ba905b1591ce4b8e4372b14ef773fd1fc7c5dfcdc99e69dfb3a", "shared_library": false, "unvendored_tests": false, "version": "3.1.1"}, "pyproj": {"depends": ["certifi", "sqlite3"], "file_name": "pyproj-3.6.1-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["pyproj"], "install_dir": "site", "name": "pyproj", "package_type": "package", "sha256": "b68990d0daa4ef0baaf63f70d4336c05a1b06fe78e9f612154635caeda4b22b5", "shared_library": false, "unvendored_tests": false, "version": "3.6.1"}, "pyrsistent": {"depends": [], "file_name": "pyrsistent-0.20.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["_pyrsistent_version", "pyrsistent"], "install_dir": "site", "name": "pyrsistent", "package_type": "package", "sha256": "ad7da5f9513eb2a913815212a07345268986becd03194e320d1fc06f0f16a316", "shared_library": false, "unvendored_tests": false, "version": "0.20.0"}, "pysam": {"depends": [], "file_name": "pysam-0.22.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["pysam"], "install_dir": "site", "name": "pysam", "package_type": "package", "sha256": "da60ebfef06a56d8c801e29cfad87f48ee8f392eaf37e93b17ec4420cf820634", "shared_library": false, "unvendored_tests": false, "version": "0.22.0"}, "pyshp": {"depends": [], "file_name": "pyshp-2.3.1-py2.py3-none-any.whl", "imports": ["shapefile"], "install_dir": "site", "name": "pyshp", "package_type": "package", "sha256": "3e6ab6ea1b73546c4689047a031492329a5b2148e03cf587b77a001499b5face", "shared_library": false, "unvendored_tests": false, "version": "2.3.1"}, "pytest": {"depends": ["atomicwrites", "attrs", "more-itertools", "pluggy", "py", "setuptools", "six", "iniconfig", "exceptiongroup"], "file_name": "pytest-8.0.0-py3-none-any.whl", "imports": ["_pytest", "pytest"], "install_dir": "site", "name": "pytest", "package_type": "package", "sha256": "fb20a088d52e3dc4656da53f532d4db0099d087c59f4a23d67bbbd35914cac50", "shared_library": false, "unvendored_tests": false, "version": "8.0.0"}, "pytest-benchmark": {"depends": [], "file_name": "pytest_benchmark-4.0.0-py3-none-any.whl", "imports": ["pytest_benchmark"], "install_dir": "site", "name": "pytest-benchmark", "package_type": "package", "sha256": "b0e87791743fbaa5b9ae4e4d3bb9ee940b556b365fecbf2d1f05a041e1d060d1", "shared_library": false, "unvendored_tests": false, "version": "4.0.0"}, "python-dateutil": {"depends": ["six"], "file_name": "python_dateutil-2.8.2-py2.py3-none-any.whl", "imports": ["dateutil"], "install_dir": "site", "name": "python-dateutil", "package_type": "package", "sha256": "13b7d32426d6d6f468410d09aad757cdc158bb6c8b3e792d18631889f0eb0fff", "shared_library": false, "unvendored_tests": false, "version": "2.8.2"}, "python-flint": {"depends": [], "file_name": "python_flint-0.6.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["flint"], "install_dir": "site", "name": "python-flint", "package_type": "package", "sha256": "adf5dfff52bc6c3b6d0b7e1fe309b27d34667b4a4e034450586ac41f234ec60c", "shared_library": false, "unvendored_tests": false, "version": "0.6.0"}, "python-magic": {"depends": ["libmagic"], "file_name": "python_magic-0.4.27-py2.py3-none-any.whl", "imports": ["magic"], "install_dir": "site", "name": "python-magic", "package_type": "package", "sha256": "64a474cb7f557c74df601dc528003ccc3f101dc0ce71c3df205c49eef0684539", "shared_library": false, "unvendored_tests": false, "version": "0.4.27"}, "python-sat": {"depends": ["six"], "file_name": "python_sat-0.1.7.dev26-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["pysat"], "install_dir": "site", "name": "python-sat", "package_type": "package", "sha256": "7803788952f18b5c7264220d708cf7abc9f8256f9ea395436c702e0a0d0dc54c", "shared_library": false, "unvendored_tests": false, "version": "0.1.7.dev26"}, "python-solvespace": {"depends": [], "file_name": "python_solvespace-3.0.8-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["python_solvespace"], "install_dir": "site", "name": "python_solvespace", "package_type": "package", "sha256": "88cf2b8557338a8885a394cbec578668a27f4bcb37d316f8960c289b62615115", "shared_library": false, "unvendored_tests": false, "version": "3.0.8"}, "pytz": {"depends": [], "file_name": "pytz-2024.1-py2.py3-none-any.whl", "imports": ["pytz"], "install_dir": "site", "name": "pytz", "package_type": "package", "sha256": "828c09cfad9451c92b9c4593c7c5bd56e96b13aeef2343ab251b3358db046b64", "shared_library": false, "unvendored_tests": false, "version": "2024.1"}, "pywavelets": {"depends": ["numpy", "matplotlib", "scipy"], "file_name": "pywavelets-1.5.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["pywt"], "install_dir": "site", "name": "pywavelets", "package_type": "package", "sha256": "3a5ac858aec2bb1dd7b12b8599c8a82472391c790bf7c4767f8f2a1d8b510779", "shared_library": false, "unvendored_tests": true, "version": "1.5.0"}, "pywavelets-tests": {"depends": ["pywavelets"], "file_name": "pywavelets-tests.tar", "imports": [], "install_dir": "site", "name": "pywavelets-tests", "package_type": "package", "sha256": "1d9d494884b339fa677261fad4f8ece30dfbde70a8007e09da8b0e9e3f82489a", "shared_library": false, "unvendored_tests": false, "version": "1.5.0"}, "pyxel": {"depends": [], "file_name": "pyxel-1.9.10-cp37-abi3-emscripten_3_1_52_wasm32.whl", "imports": ["pyxel"], "install_dir": "site", "name": "pyxel", "package_type": "package", "sha256": "1c97defcde5e9cac133362fc4740cf382673ec48c5c872fc37fd83ebc174be73", "shared_library": false, "unvendored_tests": false, "version": "1.9.10"}, "pyxirr": {"depends": [], "file_name": "pyxirr-0.10.3-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["pyxirr"], "install_dir": "site", "name": "pyxirr", "package_type": "package", "sha256": "951945ab2c5396a0a1226d65d0f72c750b49ef72b2e7e7887980622b7e29dc8f", "shared_library": false, "unvendored_tests": false, "version": "0.10.3"}, "pyyaml": {"depends": [], "file_name": "PyYAML-6.0.1-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["_yaml", "yaml"], "install_dir": "site", "name": "pyyaml", "package_type": "package", "sha256": "c48ecc4a3ebf265657e47535042e044af690271b41b89da998f2274f90795b70", "shared_library": false, "unvendored_tests": false, "version": "6.0.1"}, "rebound": {"depends": ["numpy"], "file_name": "rebound-3.24.2-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["rebound"], "install_dir": "site", "name": "rebound", "package_type": "package", "sha256": "caf573caf7921dee4a8fb4fe4cac02ce995a5700040f3ce50d199e2d43f356f2", "shared_library": false, "unvendored_tests": false, "version": "3.24.2"}, "reboundx": {"depends": ["rebound", "numpy"], "file_name": "reboundx-3.10.1-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["reboundx"], "install_dir": "site", "name": "reboundx", "package_type": "package", "sha256": "c1baabbe4324b9c0cd313e4342b5deb62476a0526a929fb3ee813220ed050608", "shared_library": false, "unvendored_tests": false, "version": "3.10.1"}, "referencing": {"depends": ["attrs", "rpds-py"], "file_name": "referencing-0.33.0-py3-none-any.whl", "imports": ["referencing"], "install_dir": "site", "name": "referencing", "package_type": "package", "sha256": "be9f76d1e3f117bdf6a9c199d45c6210d3f6bea27bf5317c2662ae029db2f8db", "shared_library": false, "unvendored_tests": true, "version": "0.33.0"}, "referencing-tests": {"depends": ["referencing"], "file_name": "referencing-tests.tar", "imports": [], "install_dir": "site", "name": "referencing-tests", "package_type": "package", "sha256": "67694a661783940e4b8146a5514a38bb0e154b723445e6542c3e1e8cef5ef69d", "shared_library": false, "unvendored_tests": false, "version": "0.33.0"}, "regex": {"depends": [], "file_name": "regex-2023.12.25-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["regex"], "install_dir": "site", "name": "regex", "package_type": "package", "sha256": "55bd3abff20e20edfd7cc33074156f1e6582c9e846c8efba62858555ab2daa1f", "shared_library": false, "unvendored_tests": true, "version": "2023.12.25"}, "regex-tests": {"depends": ["regex"], "file_name": "regex-tests.tar", "imports": [], "install_dir": "site", "name": "regex-tests", "package_type": "package", "sha256": "82ee98fe1c7ef8a3b1b7df17ae878640c520e000f78497e5cd55ff36dcb1371e", "shared_library": false, "unvendored_tests": false, "version": "2023.12.25"}, "requests": {"depends": ["charset-normalizer", "idna", "urllib3", "certifi"], "file_name": "requests-2.31.0-py3-none-any.whl", "imports": ["requests"], "install_dir": "site", "name": "requests", "package_type": "package", "sha256": "c37a7347c492ef84c4ab521840b9b08e55e0dd139395c953c12f1c5e79048e09", "shared_library": false, "unvendored_tests": false, "version": "2.31.0"}, "retrying": {"depends": ["six"], "file_name": "retrying-1.3.4-py3-none-any.whl", "imports": ["retrying"], "install_dir": "site", "name": "retrying", "package_type": "package", "sha256": "9ed93e4230666418128303139ed0132d9ab2ed878fb6caaebd26e9f24252fd47", "shared_library": false, "unvendored_tests": false, "version": "1.3.4"}, "river": {"depends": ["numpy", "pandas", "pytest", "scipy"], "file_name": "river-0.19.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["river"], "install_dir": "site", "name": "river", "package_type": "package", "sha256": "cde384b5c2d9d156e2f92b2c43c52a7077be46123ca721237ef1b7e058f99c25", "shared_library": false, "unvendored_tests": true, "version": "0.19.0"}, "river-tests": {"depends": ["river"], "file_name": "river-tests.tar", "imports": [], "install_dir": "site", "name": "river-tests", "package_type": "package", "sha256": "b746ec007fd0e82bdf43e95650830f3ae627ba32ab02b54c3503c1fc976c6797", "shared_library": false, "unvendored_tests": false, "version": "0.19.0"}, "robotraconteur": {"depends": ["numpy"], "file_name": "RobotRaconteur-1.1.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["RobotRaconteur"], "install_dir": "site", "name": "RobotRaconteur", "package_type": "package", "sha256": "5f4e2935397080f53db5eb1e6003049a670164d00407baedd04d6e3e18d590ab", "shared_library": false, "unvendored_tests": false, "version": "1.1.0"}, "rpds-py": {"depends": [], "file_name": "rpds_py-0.17.1-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["rpds"], "install_dir": "site", "name": "rpds-py", "package_type": "package", "sha256": "5d1a33a4df211be32c0325cb0c5a8c233e7ab25bef9d70f737737a1212d5771c", "shared_library": false, "unvendored_tests": false, "version": "0.17.1"}, "ruamel-yaml": {"depends": [], "file_name": "ruamel.yaml-0.18.6-py3-none-any.whl", "imports": ["ruamel"], "install_dir": "site", "name": "ruamel.yaml", "package_type": "package", "sha256": "74ddafc830d1a04a57910f4c66da4d31e2e94359ff44ad0344bcb013cce62a5c", "shared_library": false, "unvendored_tests": false, "version": "0.18.6"}, "rust-panic-test": {"depends": [], "file_name": "rust_panic_test-1.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["rust-panic-test"], "install_dir": "site", "name": "rust-panic-test", "package_type": "package", "sha256": "6038a5d6a2ef68efdaa8530b926a773f474555ea0b997025b1fc55ef3033b47f", "shared_library": false, "unvendored_tests": false, "version": "1.0"}, "scikit-image": {"depends": ["packaging", "numpy", "scipy", "networkx", "pillow", "imageio", "pywavelets", "lazy_loader"], "file_name": "scikit_image-0.22.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["skimage"], "install_dir": "site", "name": "scikit-image", "package_type": "package", "sha256": "e79b1c315a2306b460caef828bd8d21e7a65cd4c0dfa574323650114766e51aa", "shared_library": false, "unvendored_tests": true, "version": "0.22.0"}, "scikit-image-tests": {"depends": ["scikit-image"], "file_name": "scikit-image-tests.tar", "imports": [], "install_dir": "site", "name": "scikit-image-tests", "package_type": "package", "sha256": "25c4be6af30a48325bad9d06ce0676746c2f9d0cccb8b915ba10fbe668451231", "shared_library": false, "unvendored_tests": false, "version": "0.22.0"}, "scikit-learn": {"depends": ["scipy", "joblib", "threadpoolctl"], "file_name": "scikit_learn-1.4.1.post1-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["sklearn"], "install_dir": "site", "name": "scikit-learn", "package_type": "package", "sha256": "0d82cd90dbb9a0553aa175722a759e6c7e7a654980973fcb35c5beef72b1c415", "shared_library": false, "unvendored_tests": true, "version": "1.4.1.post1"}, "scikit-learn-tests": {"depends": ["scikit-learn"], "file_name": "scikit-learn-tests.tar", "imports": [], "install_dir": "site", "name": "scikit-learn-tests", "package_type": "package", "sha256": "fd240c52ccc9f9ada3aec5f43d8f4d6a4a2ce88b4cc8b1fafa3ffc2994369121", "shared_library": false, "unvendored_tests": false, "version": "1.4.1.post1"}, "scipy": {"depends": ["numpy", "openblas"], "file_name": "scipy-1.12.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["scipy"], "install_dir": "site", "name": "scipy", "package_type": "package", "sha256": "44a9f2cecb6e808ed297570125a4fedf06093adea9662add923c18088bea6e88", "shared_library": false, "unvendored_tests": true, "version": "1.12.0"}, "scipy-tests": {"depends": ["scipy"], "file_name": "scipy-tests.tar", "imports": [], "install_dir": "site", "name": "scipy-tests", "package_type": "package", "sha256": "d52fa2282187c04740e8e3762ffba9a0befb444d5af2478497e572a2feaf83c9", "shared_library": false, "unvendored_tests": false, "version": "1.12.0"}, "screed": {"depends": [], "file_name": "screed-1.1.3-py2.py3-none-any.whl", "imports": ["bigtests", "screed"], "install_dir": "site", "name": "screed", "package_type": "package", "sha256": "79de22059131d0183e28d8aad9c174c77b0e1b0cb390f664cc6926aff0ed7533", "shared_library": false, "unvendored_tests": true, "version": "1.1.3"}, "screed-tests": {"depends": ["screed"], "file_name": "screed-tests.tar", "imports": [], "install_dir": "site", "name": "screed-tests", "package_type": "package", "sha256": "98c29d16ffc68f7d848f98a90aef0f8e1dacdd07a46e1398e8c1938025e17b9b", "shared_library": false, "unvendored_tests": false, "version": "1.1.3"}, "setuptools": {"depends": ["pyparsing"], "file_name": "setuptools-69.0.3-py3-none-any.whl", "imports": ["_distutils_hack", "pkg_resources", "setuptools"], "install_dir": "site", "name": "setuptools", "package_type": "package", "sha256": "93dcaf640b0be8b389cc8fbf3991d648388baf5eac958d73bf0b018551fcdbed", "shared_library": false, "unvendored_tests": false, "version": "69.0.3"}, "shapely": {"depends": ["numpy"], "file_name": "shapely-2.0.2-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["shapely"], "install_dir": "site", "name": "shapely", "package_type": "package", "sha256": "8f3ee0a5c93c4782f7991c54f6f1532c3b77a39fc62ca2352bb353d7ffdf506a", "shared_library": false, "unvendored_tests": true, "version": "2.0.2"}, "shapely-tests": {"depends": ["shapely"], "file_name": "shapely-tests.tar", "imports": [], "install_dir": "site", "name": "shapely-tests", "package_type": "package", "sha256": "72d732d3aad46b828a514561bdca1b50898b7b83869650d861b1fd28d6c5361a", "shared_library": false, "unvendored_tests": false, "version": "2.0.2"}, "sharedlib-test": {"depends": [], "file_name": "sharedlib-test-1.0.zip", "imports": [], "install_dir": "dynlib", "name": "sharedlib-test", "package_type": "shared_library", "sha256": "d456e12fbb69d716fe55d695ac4b2bc5202cfc71aca4c0abdad92fa17fca4591", "shared_library": true, "unvendored_tests": false, "version": "1.0"}, "sharedlib-test-py": {"depends": ["sharedlib-test"], "file_name": "sharedlib_test_py-1.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["sharedlib_test"], "install_dir": "site", "name": "sharedlib-test-py", "package_type": "package", "sha256": "17cd7be45b411b15220cf57636a8767ffe31962cc3d27247bc64f0433ec372be", "shared_library": false, "unvendored_tests": false, "version": "1.0"}, "simplejson": {"depends": [], "file_name": "simplejson-3.19.2-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["simplejson"], "install_dir": "site", "name": "simplejson", "package_type": "package", "sha256": "3e8903a4cb20c7634b44aafa584bdadf86b160a3270e742cbc1f014ddf1a9c60", "shared_library": false, "unvendored_tests": true, "version": "3.19.2"}, "simplejson-tests": {"depends": ["simplejson"], "file_name": "simplejson-tests.tar", "imports": [], "install_dir": "site", "name": "simplejson-tests", "package_type": "package", "sha256": "069b4cc67667c97b7ec1aad5d7fa2af468b9e6300265e4ce029d874109cf4d24", "shared_library": false, "unvendored_tests": false, "version": "3.19.2"}, "sisl": {"depends": ["pyparsing", "numpy", "scipy", "tqdm", "xarray", "pandas", "matplotlib"], "file_name": "sisl-0.14.3-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["sisl_toolbox", "sisl"], "install_dir": "site", "name": "sisl", "package_type": "package", "sha256": "d462055adac3f3bd03de663fb0fa93a7c19701d4d5ca33be614e7e3a8ff26a43", "shared_library": false, "unvendored_tests": true, "version": "0.14.3"}, "sisl-tests": {"depends": ["sisl"], "file_name": "sisl-tests.tar", "imports": [], "install_dir": "site", "name": "sisl-tests", "package_type": "package", "sha256": "4ffcc9e77c27ee5671569881f440d5c985dcdef999b6609e7ebedd9e5ba92f91", "shared_library": false, "unvendored_tests": false, "version": "0.14.3"}, "six": {"depends": [], "file_name": "six-1.16.0-py2.py3-none-any.whl", "imports": ["six"], "install_dir": "site", "name": "six", "package_type": "package", "sha256": "806d3fb476cd7096d7f17b1d0aa638fa0237475124a7988347ab0f713c2c2a0e", "shared_library": false, "unvendored_tests": false, "version": "1.16.0"}, "smart-open": {"depends": [], "file_name": "smart_open-6.4.0-py3-none-any.whl", "imports": ["smart_open"], "install_dir": "site", "name": "smart_open", "package_type": "package", "sha256": "3ecd1b38c6623915b59727ffee43164636870fd97b2221690d62e3f9a21b9bf3", "shared_library": false, "unvendored_tests": false, "version": "6.4.0"}, "soupsieve": {"depends": [], "file_name": "soupsieve-2.5-py3-none-any.whl", "imports": ["soupsieve"], "install_dir": "site", "name": "soupsieve", "package_type": "package", "sha256": "cc69721a353569b75313b533f622551229c3bb9b07defff7aa89fc2a5331de79", "shared_library": false, "unvendored_tests": false, "version": "2.5"}, "sourmash": {"depends": ["screed", "cffi", "deprecation", "cachetools", "numpy", "matplotlib", "scipy", "sqlite3", "bitstring"], "file_name": "sourmash-4.8.5-py3-none-emscripten_3_1_52_wasm32.whl", "imports": ["sourmash"], "install_dir": "site", "name": "sourmash", "package_type": "package", "sha256": "469408dd8a10ffd2b6e4d52d54d18c86fd849ec5ad10e348c69039604ee60d1a", "shared_library": false, "unvendored_tests": false, "version": "4.8.5"}, "sparseqr": {"depends": ["pycparser", "cffi", "numpy", "scipy", "suitesparse"], "file_name": "sparseqr-1.2-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["sparseqr"], "install_dir": "site", "name": "sparseqr", "package_type": "package", "sha256": "383362f7bf9ab1f76dac19f514d73665d9be28b99398f5f42fdced0f20ef2433", "shared_library": false, "unvendored_tests": false, "version": "1.2"}, "sqlalchemy": {"depends": ["sqlite3", "typing-extensions"], "file_name": "SQLAlchemy-2.0.25-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["sqlalchemy"], "install_dir": "site", "name": "sqlalchemy", "package_type": "package", "sha256": "2fb104c972a00e288210637529e2508e91e94992328c995b1735ea2585ef7647", "shared_library": false, "unvendored_tests": true, "version": "2.0.25"}, "sqlalchemy-tests": {"depends": ["sqlalchemy"], "file_name": "sqlalchemy-tests.tar", "imports": [], "install_dir": "site", "name": "sqlalchemy-tests", "package_type": "package", "sha256": "0aed4617cf1388347c9efd20aff6ccfe42d6c15c4d2dc68c602c53a509874bf7", "shared_library": false, "unvendored_tests": false, "version": "2.0.25"}, "sqlite3": {"depends": [], "file_name": "sqlite3-1.0.0.zip", "imports": ["sqlite3", "_sqlite3"], "install_dir": "stdlib", "name": "sqlite3", "package_type": "cpython_module", "sha256": "419f768a8e9a739f5f73e9f71e1908e783d5630cf252521ab34dfae7c69e2e41", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "ssl": {"depends": ["openssl"], "file_name": "ssl-1.0.0.zip", "imports": ["ssl", "_ssl"], "install_dir": "stdlib", "name": "ssl", "package_type": "cpython_module", "sha256": "b75d2d0124f846e93a54b6935ebc6f68219465d09a4ad7b2d6fbdbd591d669c8", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "stack-data": {"depends": [], "file_name": "stack_data-0.6.3-py3-none-any.whl", "imports": ["stack_data"], "install_dir": "site", "name": "stack_data", "package_type": "package", "sha256": "09656d5a7f6c61dd13bbf2e348144f08847ae340fb0142dddc6ede36baab0575", "shared_library": false, "unvendored_tests": false, "version": "0.6.3"}, "statsmodels": {"depends": ["numpy", "scipy", "pandas", "patsy", "packaging"], "file_name": "statsmodels-0.14.1-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["statsmodels"], "install_dir": "site", "name": "statsmodels", "package_type": "package", "sha256": "7a4503441de67b143c16b9db2093d49a133aff0f29731d23fbb1bee7e4f084d0", "shared_library": false, "unvendored_tests": true, "version": "0.14.1"}, "statsmodels-tests": {"depends": ["statsmodels"], "file_name": "statsmodels-tests.tar", "imports": [], "install_dir": "site", "name": "statsmodels-tests", "package_type": "package", "sha256": "e07d00251262bd2ea8d238297c06592866766303395eaed88f90bfeba558f7ed", "shared_library": false, "unvendored_tests": false, "version": "0.14.1"}, "suitesparse": {"depends": ["openblas"], "file_name": "suitesparse-5.11.0.zip", "imports": [], "install_dir": "dynlib", "name": "suitesparse", "package_type": "shared_library", "sha256": "cea76901179a595f0b2b580416865ed7dff10b991de49d8137197f1e5898cfa8", "shared_library": true, "unvendored_tests": false, "version": "5.11.0"}, "svgwrite": {"depends": [], "file_name": "svgwrite-1.4.3-py3-none-any.whl", "imports": ["svgwrite"], "install_dir": "site", "name": "svgwrite", "package_type": "package", "sha256": "0cb062c6f810d547132cc7bde914f146d2e713511122ed96004ecd2f4eb99d5d", "shared_library": false, "unvendored_tests": false, "version": "1.4.3"}, "swiglpk": {"depends": [], "file_name": "swiglpk-5.0.10-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["swiglpk"], "install_dir": "site", "name": "swiglpk", "package_type": "package", "sha256": "4958289e6451088da120579b706828ddcfaba7b38197c7fe8e89263d919cbf78", "shared_library": false, "unvendored_tests": false, "version": "5.0.10"}, "sympy": {"depends": ["mpmath"], "file_name": "sympy-1.12-py3-none-any.whl", "imports": ["isympy", "sympy"], "install_dir": "site", "name": "sympy", "package_type": "package", "sha256": "cb51cc405a711705a475fc0c61c8b77b8841f13008289bbf957244de64e42bb5", "shared_library": false, "unvendored_tests": true, "version": "1.12"}, "sympy-tests": {"depends": ["sympy"], "file_name": "sympy-tests.tar", "imports": [], "install_dir": "site", "name": "sympy-tests", "package_type": "package", "sha256": "f9af5dbb38600a4dbb881a2cd283fb1049e08212e8a76a743ddc36ae488623b3", "shared_library": false, "unvendored_tests": false, "version": "1.12"}, "tblib": {"depends": [], "file_name": "tblib-3.0.0-py3-none-any.whl", "imports": ["tblib"], "install_dir": "site", "name": "tblib", "package_type": "package", "sha256": "d83e1552939dadab7c9999600eb785373c849d1c9dba0b7b26f4bb41a0315ff1", "shared_library": false, "unvendored_tests": false, "version": "3.0.0"}, "termcolor": {"depends": [], "file_name": "termcolor-2.4.0-py3-none-any.whl", "imports": ["termcolor"], "install_dir": "site", "name": "termcolor", "package_type": "package", "sha256": "ee6e1b34bc26b33118a5efba59c2212e0c3ac66a87d2321b925dc97a6994d0fd", "shared_library": false, "unvendored_tests": false, "version": "2.4.0"}, "test": {"depends": [], "file_name": "test-1.0.0.zip", "imports": ["test"], "install_dir": "stdlib", "name": "test", "package_type": "cpython_module", "sha256": "274ff8114a61ee55a785ea5036527ab5a6551e225a697ae46acbc8822963bd3b", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "texttable": {"depends": [], "file_name": "texttable-1.7.0-py2.py3-none-any.whl", "imports": ["texttable"], "install_dir": "site", "name": "texttable", "package_type": "package", "sha256": "5faab1895ab8da84aa776a7d40453e698c2bf87cc42a28705f5c8a9888690ca1", "shared_library": false, "unvendored_tests": false, "version": "1.7.0"}, "threadpoolctl": {"depends": [], "file_name": "threadpoolctl-3.2.0-py3-none-any.whl", "imports": ["threadpoolctl"], "install_dir": "site", "name": "threadpoolctl", "package_type": "package", "sha256": "c7a38ae6048437bd006bb805b009cb10865a4e16c7a8450050ac872cdacde0a3", "shared_library": false, "unvendored_tests": false, "version": "3.2.0"}, "tomli": {"depends": [], "file_name": "tomli-2.0.1-py3-none-any.whl", "imports": ["tomli"], "install_dir": "site", "name": "tomli", "package_type": "package", "sha256": "55e0feccbc8567f25659f8ab1b30146c80d05d2bba16dd12e3622a6c38a3e207", "shared_library": false, "unvendored_tests": false, "version": "2.0.1"}, "tomli-w": {"depends": [], "file_name": "tomli_w-1.0.0-py3-none-any.whl", "imports": ["tomli_w"], "install_dir": "site", "name": "tomli-w", "package_type": "package", "sha256": "f3e9a27cfe09378ba26e27814ee56f2bdf4093acdd5ea505a554067d015e8406", "shared_library": false, "unvendored_tests": false, "version": "1.0.0"}, "toolz": {"depends": [], "file_name": "toolz-0.12.1-py3-none-any.whl", "imports": ["tlz", "toolz"], "install_dir": "site", "name": "toolz", "package_type": "package", "sha256": "be7e35ba98d065b8646a7a0ad3325edc17705731aa4b99880a0f415003e7c6ab", "shared_library": false, "unvendored_tests": true, "version": "0.12.1"}, "toolz-tests": {"depends": ["toolz"], "file_name": "toolz-tests.tar", "imports": [], "install_dir": "site", "name": "toolz-tests", "package_type": "package", "sha256": "117b204d9f05497894c31fa70e65cc2e7b2d25c0f258718316bbd2b0e568073c", "shared_library": false, "unvendored_tests": false, "version": "0.12.1"}, "tqdm": {"depends": [], "file_name": "tqdm-4.66.1-py3-none-any.whl", "imports": ["tqdm"], "install_dir": "site", "name": "tqdm", "package_type": "package", "sha256": "22298c7c000d07f8e0b75538e743281379f60d26a134a05f744b9b07a33a510a", "shared_library": false, "unvendored_tests": false, "version": "4.66.1"}, "traitlets": {"depends": [], "file_name": "traitlets-5.14.1-py3-none-any.whl", "imports": ["traitlets"], "install_dir": "site", "name": "traitlets", "package_type": "package", "sha256": "b20daba9fcae6fba02d0d55935d4ab70cd5976ff70b3a90e5bf326f77f111223", "shared_library": false, "unvendored_tests": true, "version": "5.14.1"}, "traitlets-tests": {"depends": ["traitlets"], "file_name": "traitlets-tests.tar", "imports": [], "install_dir": "site", "name": "traitlets-tests", "package_type": "package", "sha256": "72aea5a539b971ac0c25b63d37a6eeb6011bd139e601b5f0fa6ab53f26c602c4", "shared_library": false, "unvendored_tests": false, "version": "5.14.1"}, "traits": {"depends": [], "file_name": "traits-6.4.3-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["traits"], "install_dir": "site", "name": "traits", "package_type": "package", "sha256": "43ee046ce1bcf23efed3077305007d9aa1b9f2ea210be8c014a30e1f2a547593", "shared_library": false, "unvendored_tests": true, "version": "6.4.3"}, "traits-tests": {"depends": ["traits"], "file_name": "traits-tests.tar", "imports": [], "install_dir": "site", "name": "traits-tests", "package_type": "package", "sha256": "fd541c67c7573d42ace8f3a643d492b4b65c25eef131c039e0ee2f43db4c15c7", "shared_library": false, "unvendored_tests": false, "version": "6.4.3"}, "tskit": {"depends": ["numpy", "svgwrite", "jsonschema", "rpds-py"], "file_name": "tskit-0.5.6-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["tskit"], "install_dir": "site", "name": "tskit", "package_type": "package", "sha256": "6cfe3c8ac1651808e571aaaafd791d0e9fc87ccf917eb5f351ca5772edccc793", "shared_library": false, "unvendored_tests": false, "version": "0.5.6"}, "typing-extensions": {"depends": [], "file_name": "typing_extensions-4.9.0-py3-none-any.whl", "imports": ["typing_extensions"], "install_dir": "site", "name": "typing-extensions", "package_type": "package", "sha256": "0019bc9b62ff497d7deeb1b28005f435fa797b274645ace94849c5e59f07204a", "shared_library": false, "unvendored_tests": false, "version": "4.9.0"}, "uncertainties": {"depends": ["future"], "file_name": "uncertainties-3.1.7-py2.py3-none-any.whl", "imports": ["uncertainties"], "install_dir": "site", "name": "uncertainties", "package_type": "package", "sha256": "46287a40c85d117893ee2defc156fb2b2fe1178440b51eb1c1cdaf4760da6de2", "shared_library": false, "unvendored_tests": true, "version": "3.1.7"}, "uncertainties-tests": {"depends": ["uncertainties"], "file_name": "uncertainties-tests.tar", "imports": [], "install_dir": "site", "name": "uncertainties-tests", "package_type": "package", "sha256": "3cc638919066f3719dfcd77aec3d25bb0e3e13a129fdb73ca140b86885c56a64", "shared_library": false, "unvendored_tests": false, "version": "3.1.7"}, "unyt": {"depends": ["numpy", "sympy"], "file_name": "unyt-3.0.1-py3-none-any.whl", "imports": ["unyt"], "install_dir": "site", "name": "unyt", "package_type": "package", "sha256": "16796eb916203146564d3aff8966a32eb324fd2c58c640e9bf810542b55edea9", "shared_library": false, "unvendored_tests": true, "version": "3.0.1"}, "unyt-tests": {"depends": ["unyt"], "file_name": "unyt-tests.tar", "imports": [], "install_dir": "site", "name": "unyt-tests", "package_type": "package", "sha256": "70fff92307002f2c9ca8e5375592c3de5915cfdda2b040996ebb34896346409c", "shared_library": false, "unvendored_tests": false, "version": "3.0.1"}, "urllib3": {"depends": [], "file_name": "urllib3-2.2.0-py3-none-any.whl", "imports": ["urllib3"], "install_dir": "site", "name": "urllib3", "package_type": "package", "sha256": "88824894430fa00a43965d6e8f55d73c26be9d893fc964a86d6b88ac550cac0a", "shared_library": false, "unvendored_tests": false, "version": "2.2.0"}, "wcwidth": {"depends": [], "file_name": "wcwidth-0.2.13-py2.py3-none-any.whl", "imports": ["wcwidth"], "install_dir": "site", "name": "wcwidth", "package_type": "package", "sha256": "f344df0c71e21048d7fa1d5236d46737dfe3b3e12e2836e595f2b72d36e091c0", "shared_library": false, "unvendored_tests": false, "version": "0.2.13"}, "webencodings": {"depends": [], "file_name": "webencodings-0.5.1-py2.py3-none-any.whl", "imports": ["webencodings"], "install_dir": "site", "name": "webencodings", "package_type": "package", "sha256": "b98b537a2e8500aa553d74a1a6455c3124e1da0b02ffc77b921f74846a91e808", "shared_library": false, "unvendored_tests": false, "version": "0.5.1"}, "wordcloud": {"depends": ["matplotlib"], "file_name": "wordcloud-1.9.3-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["wordcloud"], "install_dir": "site", "name": "wordcloud", "package_type": "package", "sha256": "69ded5ee6d6cb5372bad947341242b7d11b3eb0b44691777306c4cee244139bc", "shared_library": false, "unvendored_tests": false, "version": "1.9.3"}, "wrapt": {"depends": [], "file_name": "wrapt-1.16.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["wrapt"], "install_dir": "site", "name": "wrapt", "package_type": "package", "sha256": "7ecee492aa3862451c3a9a853117b7b7f88b3c09fabc1aed3e14dbc7aee4e405", "shared_library": false, "unvendored_tests": false, "version": "1.16.0"}, "xarray": {"depends": ["numpy", "packaging", "pandas"], "file_name": "xarray-2024.1.1-py3-none-any.whl", "imports": ["xarray"], "install_dir": "site", "name": "xarray", "package_type": "package", "sha256": "bf44fd5a6941bec39393aeca8d3f67cb2dbf00601ca991b1b5847a13cf74a262", "shared_library": false, "unvendored_tests": true, "version": "2024.1.1"}, "xarray-tests": {"depends": ["xarray"], "file_name": "xarray-tests.tar", "imports": [], "install_dir": "site", "name": "xarray-tests", "package_type": "package", "sha256": "14350ef8a01a419e3d99abaf07de3662655743ce87960baa61095577289e77cb", "shared_library": false, "unvendored_tests": false, "version": "2024.1.1"}, "xlrd": {"depends": [], "file_name": "xlrd-2.0.1-py2.py3-none-any.whl", "imports": ["xlrd"], "install_dir": "site", "name": "xlrd", "package_type": "package", "sha256": "a1a66c051a43d312ff4dde23b6c51603aa12b4cf0628d593f269a4908dfa7a3b", "shared_library": false, "unvendored_tests": false, "version": "2.0.1"}, "xyzservices": {"depends": [], "file_name": "xyzservices-2023.10.1-py3-none-any.whl", "imports": ["xyzservices"], "install_dir": "site", "name": "xyzservices", "package_type": "package", "sha256": "cfd1836f2c443202b08d1b2f1973685ee148ebacca1307e3ba8c72ac56dfb052", "shared_library": false, "unvendored_tests": true, "version": "2023.10.1"}, "xyzservices-tests": {"depends": ["xyzservices"], "file_name": "xyzservices-tests.tar", "imports": [], "install_dir": "site", "name": "xyzservices-tests", "package_type": "package", "sha256": "42506aadecd41db56c4ffab773ffa9e58bee3e6a9a2d29c9400d302a1039eee9", "shared_library": false, "unvendored_tests": false, "version": "2023.10.1"}, "yarl": {"depends": ["multidict", "idna"], "file_name": "yarl-1.9.4-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["yarl"], "install_dir": "site", "name": "yarl", "package_type": "package", "sha256": "b25c388e86c0743c107a84719a5ba229425da9fc8c67017063f52e0022aa37ce", "shared_library": false, "unvendored_tests": false, "version": "1.9.4"}, "yt": {"depends": ["ewah_bool_utils", "numpy", "matplotlib", "sympy", "setuptools", "packaging", "unyt", "cmyt", "colorspacious", "tqdm", "tomli", "tomli-w"], "file_name": "yt-4.3.0-cp312-cp312-emscripten_3_1_52_wasm32.whl", "imports": ["yt"], "install_dir": "site", "name": "yt", "package_type": "package", "sha256": "cdcb42007b23cc95b2b7ed11b07920a35372e227f0314660572b807d1ba2fe86", "shared_library": false, "unvendored_tests": false, "version": "4.3.0"}, "zarr": {"depends": ["numpy", "asciitree", "numcodecs"], "file_name": "zarr-2.16.1-py3-none-any.whl", "imports": ["zarr"], "install_dir": "site", "name": "zarr", "package_type": "package", "sha256": "667951274a27084b88c997b3fdbde6cd4bf01aeff80ed9a438b2a6e81a0b0268", "shared_library": false, "unvendored_tests": true, "version": "2.16.1"}, "zarr-tests": {"depends": ["zarr"], "file_name": "zarr-tests.tar", "imports": [], "install_dir": "site", "name": "zarr-tests", "package_type": "package", "sha256": "eec566d064eb964041a058d597d0f02a5f925f6c36e90cdf73ab4c5935108635", "shared_library": false, "unvendored_tests": false, "version": "2.16.1"}, "zengl": {"depends": [], "file_name": "zengl-2.4.1-cp311-abi3-emscripten_3_1_52_wasm32.whl", "imports": ["zengl", "_zengl"], "install_dir": "site", "name": "zengl", "package_type": "package", "sha256": "d14c5938542ae6d6cd4b6fc4fdf1ae17dcaf15b7fc9755997847989866a54c91", "shared_library": false, "unvendored_tests": false, "version": "2.4.1"}}} \ No newline at end of file +{"info": {"abi_version": "2024_0", "arch": "wasm32", "platform": "emscripten_3_1_58", "python": "3.12.1", "version": "0.26.1"}, "packages": {"aiohttp": {"depends": ["aiosignal", "async-timeout", "attrs", "charset-normalizer", "frozenlist", "multidict", "yarl"], "file_name": "aiohttp-3.9.5-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["aiohttp"], "install_dir": "site", "name": "aiohttp", "package_type": "package", "sha256": "c9a381c45ca9d6f16f6ec269c27a82bcbcaa3075f7f8e5de271ef5c256aa4ea4", "shared_library": false, "unvendored_tests": true, "version": "3.9.5"}, "aiohttp-tests": {"depends": ["aiohttp"], "file_name": "aiohttp-tests.tar", "imports": [], "install_dir": "site", "name": "aiohttp-tests", "package_type": "package", "sha256": "dc42d3bea4ede411be4cd43059f224832438b00f076fbe4d9d1ef516e2eab250", "shared_library": false, "unvendored_tests": false, "version": "3.9.5"}, "aiosignal": {"depends": ["frozenlist"], "file_name": "aiosignal-1.3.1-py3-none-any.whl", "imports": ["aiosignal"], "install_dir": "site", "name": "aiosignal", "package_type": "package", "sha256": "e091282e280a5940e759c5c849dfcd3169f8eea21d5838c872ec1265ef825f1e", "shared_library": false, "unvendored_tests": false, "version": "1.3.1"}, "altair": {"depends": ["typing-extensions", "jinja2", "jsonschema", "numpy", "pandas", "toolz", "packaging"], "file_name": "altair-5.3.0-py3-none-any.whl", "imports": ["altair"], "install_dir": "site", "name": "altair", "package_type": "package", "sha256": "1d2f248506ab81f13292d42464faa60c4940c1ef5da9013dc3a97ed398d6f7f7", "shared_library": false, "unvendored_tests": false, "version": "5.3.0"}, "annotated-types": {"depends": [], "file_name": "annotated_types-0.6.0-py3-none-any.whl", "imports": ["annotated_types"], "install_dir": "site", "name": "annotated-types", "package_type": "package", "sha256": "337d2a3e1b65926cd6560d0c9a33f8be55d6b8a21e846091bc7ab8fdb2f421a3", "shared_library": false, "unvendored_tests": true, "version": "0.6.0"}, "annotated-types-tests": {"depends": ["annotated-types"], "file_name": "annotated-types-tests.tar", "imports": [], "install_dir": "site", "name": "annotated-types-tests", "package_type": "package", "sha256": "0eecd674a295f84758689100739cca7d54f73cd6288c41f2269f78a01e465a8d", "shared_library": false, "unvendored_tests": false, "version": "0.6.0"}, "asciitree": {"depends": [], "file_name": "asciitree-0.3.3-py3-none-any.whl", "imports": ["asciitree"], "install_dir": "site", "name": "asciitree", "package_type": "package", "sha256": "15d47009b9cacdddacbc7ef306e64d103ea96d4fdc0fbb2d579e43c8fe8666bf", "shared_library": false, "unvendored_tests": false, "version": "0.3.3"}, "astropy": {"depends": ["packaging", "numpy", "pyerfa", "pyyaml", "astropy_iers_data"], "file_name": "astropy-6.0.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["astropy"], "install_dir": "site", "name": "astropy", "package_type": "package", "sha256": "94be600bfff4973c962112913bf86b5d1c4ba8b162b6ef409a03f70a0cefb9e9", "shared_library": false, "unvendored_tests": false, "version": "6.0.1"}, "astropy-iers-data": {"depends": [], "file_name": "astropy_iers_data-0.2024.4.22.0.29.50-py3-none-any.whl", "imports": ["astropy_iers_data"], "install_dir": "site", "name": "astropy_iers_data", "package_type": "package", "sha256": "b9989c71b05bc8a550d74d7e49d5e041f192f420bdf8b71553adb225e286f478", "shared_library": false, "unvendored_tests": true, "version": "0.2024.4.22.0.29.50"}, "astropy-iers-data-tests": {"depends": ["astropy_iers_data"], "file_name": "astropy_iers_data-tests.tar", "imports": [], "install_dir": "site", "name": "astropy_iers_data-tests", "package_type": "package", "sha256": "3cbaffbea097e4d5f206a7f357b59871a67594cd3f899ad45a28c293c271d4f1", "shared_library": false, "unvendored_tests": false, "version": "0.2024.4.22.0.29.50"}, "asttokens": {"depends": ["six"], "file_name": "asttokens-2.4.1-py2.py3-none-any.whl", "imports": ["asttokens"], "install_dir": "site", "name": "asttokens", "package_type": "package", "sha256": "4f62a79cfd557b35cd1f1e4809c61eef0b6e54e0dea5270653bbde3fc341d05a", "shared_library": false, "unvendored_tests": false, "version": "2.4.1"}, "async-timeout": {"depends": [], "file_name": "async_timeout-4.0.3-py3-none-any.whl", "imports": ["async_timeout"], "install_dir": "site", "name": "async-timeout", "package_type": "package", "sha256": "39d42f0d92a009c9205d74a01ff194d89ea9f1741af36998bc405c615993779e", "shared_library": false, "unvendored_tests": false, "version": "4.0.3"}, "atomicwrites": {"depends": [], "file_name": "atomicwrites-1.4.1-py2.py3-none-any.whl", "imports": ["atomicwrites"], "install_dir": "site", "name": "atomicwrites", "package_type": "package", "sha256": "7ac6f1fb3dde1c23246b08b6d2a380fb9e1b344e57126f00bd9364ad1104bc82", "shared_library": false, "unvendored_tests": false, "version": "1.4.1"}, "attrs": {"depends": ["six"], "file_name": "attrs-23.2.0-py3-none-any.whl", "imports": ["attr", "attrs"], "install_dir": "site", "name": "attrs", "package_type": "package", "sha256": "8e0e26b04b67bd3f09a60f289a0673aadb45daef63c8a6ceca762159d41bdea8", "shared_library": false, "unvendored_tests": false, "version": "23.2.0"}, "autograd": {"depends": ["numpy", "future"], "file_name": "autograd-1.6.2-py3-none-any.whl", "imports": ["autograd"], "install_dir": "site", "name": "autograd", "package_type": "package", "sha256": "4fd6746b144d95de5e8dceae6d2d4fa2a962810b93e420430df74506e915af67", "shared_library": false, "unvendored_tests": true, "version": "1.6.2"}, "autograd-tests": {"depends": ["autograd"], "file_name": "autograd-tests.tar", "imports": [], "install_dir": "site", "name": "autograd-tests", "package_type": "package", "sha256": "4869f8c5b9bbdedfb84ebe2f866934dd9204f62d65b8e2e1c87feb5f769afec3", "shared_library": false, "unvendored_tests": false, "version": "1.6.2"}, "awkward-cpp": {"depends": ["numpy"], "file_name": "awkward_cpp-33-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["awkward_cpp"], "install_dir": "site", "name": "awkward-cpp", "package_type": "package", "sha256": "6dba5ce80f904ade19758b4e0b1e3bc4681aa0bb5e414d6a243251bc3ff9fd10", "shared_library": false, "unvendored_tests": false, "version": "33"}, "b2d": {"depends": ["numpy", "pydantic", "setuptools", "annotated-types"], "file_name": "b2d-0.7.4-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["b2d"], "install_dir": "site", "name": "b2d", "package_type": "package", "sha256": "6a2c8d02641ff9a65b19adfbe0f0aeef1ad1a8a8915a91122d554c3335c82faa", "shared_library": false, "unvendored_tests": false, "version": "0.7.4"}, "bcrypt": {"depends": [], "file_name": "bcrypt-4.1.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["bcrypt"], "install_dir": "site", "name": "bcrypt", "package_type": "package", "sha256": "8981e7922af6f1f6e2ad31ef120c67bfee047916e0b764ed5cd2a1ed8eaadbc7", "shared_library": false, "unvendored_tests": false, "version": "4.1.2"}, "beautifulsoup4": {"depends": ["soupsieve"], "file_name": "beautifulsoup4-4.12.3-py3-none-any.whl", "imports": ["bs4"], "install_dir": "site", "name": "beautifulsoup4", "package_type": "package", "sha256": "94a8052bb54628e76229fe6a1d1d16aa360f265c15abbca97497dad5370f7a7b", "shared_library": false, "unvendored_tests": true, "version": "4.12.3"}, "beautifulsoup4-tests": {"depends": ["beautifulsoup4"], "file_name": "beautifulsoup4-tests.tar", "imports": [], "install_dir": "site", "name": "beautifulsoup4-tests", "package_type": "package", "sha256": "55ec265dec8d21577aad92c4f7f2e5b22f3edecdc68fe003e525946bb088c44d", "shared_library": false, "unvendored_tests": false, "version": "4.12.3"}, "biopython": {"depends": ["numpy"], "file_name": "biopython-1.83-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["Bio", "BioSQL"], "install_dir": "site", "name": "biopython", "package_type": "package", "sha256": "4102d8fa77feca014bb2d49bebbae50cb6b0583737aff4ad02a3efaa6accd55c", "shared_library": false, "unvendored_tests": false, "version": "1.83"}, "bitarray": {"depends": [], "file_name": "bitarray-2.9.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["bitarray"], "install_dir": "site", "name": "bitarray", "package_type": "package", "sha256": "c7cfd44b70d8e6d5e26f81dbd7c7ac96cb562f6dceed02d6af3fdd23e6f74888", "shared_library": false, "unvendored_tests": true, "version": "2.9.2"}, "bitarray-tests": {"depends": ["bitarray"], "file_name": "bitarray-tests.tar", "imports": [], "install_dir": "site", "name": "bitarray-tests", "package_type": "package", "sha256": "3378a1981df0a26a423dde6ab332a4965447e35af539ceabfe4e330bed05f933", "shared_library": false, "unvendored_tests": false, "version": "2.9.2"}, "bitstring": {"depends": ["bitarray"], "file_name": "bitstring-4.1.4-py3-none-any.whl", "imports": ["bitstring"], "install_dir": "site", "name": "bitstring", "package_type": "package", "sha256": "fdea8060e5d10fe019b702aba16c3b0a349abca3230640dd70d57e49e824d127", "shared_library": false, "unvendored_tests": false, "version": "4.1.4"}, "bleach": {"depends": ["webencodings", "packaging", "six"], "file_name": "bleach-6.1.0-py3-none-any.whl", "imports": ["bleach"], "install_dir": "site", "name": "bleach", "package_type": "package", "sha256": "5e12c4669d0caeb23584e9fd5115a7c81c7d8cd10915c64e6f3357e549e3179d", "shared_library": false, "unvendored_tests": false, "version": "6.1.0"}, "bokeh": {"depends": ["contourpy", "numpy", "jinja2", "pandas", "pillow", "python-dateutil", "six", "typing-extensions", "pyyaml", "xyzservices"], "file_name": "bokeh-3.4.1-py3-none-any.whl", "imports": ["bokeh"], "install_dir": "site", "name": "bokeh", "package_type": "package", "sha256": "5617ba021385e030d02822fee0f10d2a58e97951472ddd6eaae4fc8682ff276f", "shared_library": false, "unvendored_tests": false, "version": "3.4.1"}, "boost-histogram": {"depends": ["numpy"], "file_name": "boost_histogram-1.4.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["boost_histogram"], "install_dir": "site", "name": "boost-histogram", "package_type": "package", "sha256": "76cb6e74ed49b53043fa55a0896279c3f83a8eb9b749f7a710360d08f2e324a4", "shared_library": false, "unvendored_tests": false, "version": "1.4.1"}, "brotli": {"depends": [], "file_name": "Brotli-1.1.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["brotli"], "install_dir": "site", "name": "brotli", "package_type": "package", "sha256": "60f96da7ec930a6c71d92f9f4c811ac96748d80c7f83f0664f2b59c08052f173", "shared_library": false, "unvendored_tests": false, "version": "1.1.0"}, "cachetools": {"depends": [], "file_name": "cachetools-5.3.3-py3-none-any.whl", "imports": ["cachetools"], "install_dir": "site", "name": "cachetools", "package_type": "package", "sha256": "89aabb74b24badd4557a1e4b2d6e2ac000089aeb4083b1c62afed95a40c88d90", "shared_library": false, "unvendored_tests": false, "version": "5.3.3"}, "cartopy": {"depends": ["shapely", "pyshp", "pyproj", "geos", "matplotlib", "scipy"], "file_name": "Cartopy-0.23.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["cartopy"], "install_dir": "site", "name": "Cartopy", "package_type": "package", "sha256": "d202ba6909b904b13d2013ab791651e24658dae3c7dfb930ae14b2522a6064b9", "shared_library": false, "unvendored_tests": true, "version": "0.23.0"}, "cartopy-tests": {"depends": ["cartopy"], "file_name": "Cartopy-tests.tar", "imports": [], "install_dir": "site", "name": "Cartopy-tests", "package_type": "package", "sha256": "e817f56f9745cbe6a20df6aa41c03967fd82508354e9f5b8ddda9886be3be903", "shared_library": false, "unvendored_tests": false, "version": "0.23.0"}, "cbor-diag": {"depends": [], "file_name": "cbor_diag-1.0.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["cbor_diag"], "install_dir": "site", "name": "cbor-diag", "package_type": "package", "sha256": "e4f0f8e870c80e76a50edc2a12883a90b87c8c8a6296444cd32c58157aebef2a", "shared_library": false, "unvendored_tests": false, "version": "1.0.1"}, "certifi": {"depends": [], "file_name": "certifi-2024.2.2-py3-none-any.whl", "imports": ["certifi"], "install_dir": "site", "name": "certifi", "package_type": "package", "sha256": "60307c886a375d40cf3ba444151c347b4271e9dcd7f432517896dcd692dafc62", "shared_library": false, "unvendored_tests": false, "version": "2024.2.2"}, "cffi": {"depends": ["pycparser"], "file_name": "cffi-1.16.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["cffi"], "install_dir": "site", "name": "cffi", "package_type": "package", "sha256": "4a993a87e8a955d817656931640ee3a5e2abb887e73397def631613b1ee91273", "shared_library": false, "unvendored_tests": false, "version": "1.16.0"}, "cffi-example": {"depends": ["cffi"], "file_name": "cffi_example-0.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["cffi_example"], "install_dir": "site", "name": "cffi_example", "package_type": "package", "sha256": "0419901f15584f393072aabafdaf30b9469fdd515771b15fa0348ad4145303de", "shared_library": false, "unvendored_tests": false, "version": "0.1"}, "cftime": {"depends": ["numpy"], "file_name": "cftime-1.6.3-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["cftime"], "install_dir": "site", "name": "cftime", "package_type": "package", "sha256": "af2ffd030f317b437c9d8b51348d5203c06c6d62363b29780d83c0f0b37f7912", "shared_library": false, "unvendored_tests": false, "version": "1.6.3"}, "charset-normalizer": {"depends": [], "file_name": "charset_normalizer-3.3.2-py3-none-any.whl", "imports": ["charset_normalizer"], "install_dir": "site", "name": "charset-normalizer", "package_type": "package", "sha256": "b7159d1583fd0938540590346a637e8f4661d9a31461c1a7bc57893a71089acb", "shared_library": false, "unvendored_tests": false, "version": "3.3.2"}, "clarabel": {"depends": ["numpy", "scipy"], "file_name": "clarabel-0.7.1-cp37-abi3-pyodide_2024_0_wasm32.whl", "imports": ["clarabel"], "install_dir": "site", "name": "clarabel", "package_type": "package", "sha256": "2065e3eae13ee52440cadd32e373bd748536a572698f2e722315948f1bf1800c", "shared_library": false, "unvendored_tests": false, "version": "0.7.1"}, "click": {"depends": [], "file_name": "click-8.1.7-py3-none-any.whl", "imports": ["click"], "install_dir": "site", "name": "click", "package_type": "package", "sha256": "a91efee37121d94b0a1584676a08fba266acf76ca821274cbd7bf6abbb7984df", "shared_library": false, "unvendored_tests": false, "version": "8.1.7"}, "cligj": {"depends": ["click"], "file_name": "cligj-0.7.2-py3-none-any.whl", "imports": ["cligj"], "install_dir": "site", "name": "cligj", "package_type": "package", "sha256": "b938b3aa1e035663db0077f98b889af0f6e3a1fcba727392ef0fdb999c061a76", "shared_library": false, "unvendored_tests": false, "version": "0.7.2"}, "cloudpickle": {"depends": [], "file_name": "cloudpickle-3.0.0-py3-none-any.whl", "imports": ["cloudpickle"], "install_dir": "site", "name": "cloudpickle", "package_type": "package", "sha256": "c658a09163430185fcc8b091cccec3b7809a66a89ce366ddcea721bae39082f6", "shared_library": false, "unvendored_tests": false, "version": "3.0.0"}, "cmyt": {"depends": ["colorspacious", "matplotlib", "more-itertools", "numpy"], "file_name": "cmyt-2.0.0-py3-none-any.whl", "imports": ["cmyt"], "install_dir": "site", "name": "cmyt", "package_type": "package", "sha256": "5e99f7f3922eebd62e1570a254cd6aba140efadc5f5dab743ad16859f84071d3", "shared_library": false, "unvendored_tests": true, "version": "2.0.0"}, "cmyt-tests": {"depends": ["cmyt"], "file_name": "cmyt-tests.tar", "imports": [], "install_dir": "site", "name": "cmyt-tests", "package_type": "package", "sha256": "8cabd34a691476a4c425459e8ca0cf39c34d552a34e23ced302edc3c3257a671", "shared_library": false, "unvendored_tests": false, "version": "2.0.0"}, "colorspacious": {"depends": ["numpy"], "file_name": "colorspacious-1.1.2-py2.py3-none-any.whl", "imports": ["colorspacious"], "install_dir": "site", "name": "colorspacious", "package_type": "package", "sha256": "acee2628cc1eafc4ef7456563bb3dbe0f1578e95dd96a02d8127b09a552dbd33", "shared_library": false, "unvendored_tests": false, "version": "1.1.2"}, "contourpy": {"depends": ["numpy"], "file_name": "contourpy-1.2.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["contourpy"], "install_dir": "site", "name": "contourpy", "package_type": "package", "sha256": "8cc70108fea11bc60feb5d38fa4546155f00407c8ffcd082600c62bf0278b0a5", "shared_library": false, "unvendored_tests": false, "version": "1.2.1"}, "coolprop": {"depends": ["numpy", "matplotlib"], "file_name": "CoolProp-6.6.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["CoolProp"], "install_dir": "site", "name": "coolprop", "package_type": "package", "sha256": "aa0083a1067adc59aa8741e10ea67b677f2693e0fe95574ca4589169cef2d03b", "shared_library": false, "unvendored_tests": true, "version": "6.6.0"}, "coolprop-tests": {"depends": ["coolprop"], "file_name": "coolprop-tests.tar", "imports": [], "install_dir": "site", "name": "coolprop-tests", "package_type": "package", "sha256": "82b2574e6b4ee184156367481db9b9479f7f3d6cf5880940b0e726f866f3677c", "shared_library": false, "unvendored_tests": false, "version": "6.6.0"}, "coverage": {"depends": ["sqlite3"], "file_name": "coverage-7.4.4-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["coverage"], "install_dir": "site", "name": "coverage", "package_type": "package", "sha256": "606a1a385c30766260b5b7d2f7ded768a5f91e29b0c090c5bbac7b2bb2b2c2e7", "shared_library": false, "unvendored_tests": false, "version": "7.4.4"}, "cpp-exceptions-test": {"depends": [], "file_name": "cpp-exceptions-test-0.1.zip", "imports": [], "install_dir": "dynlib", "name": "cpp-exceptions-test", "package_type": "shared_library", "sha256": "23ee6f17609635436bc8cced518a3adec8bdf095f0dda8062166e39077cf8005", "shared_library": true, "unvendored_tests": false, "version": "0.1"}, "cpp-exceptions-test2": {"depends": [], "file_name": "cpp_exceptions_test2-1.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["cpp-exceptions-test2"], "install_dir": "site", "name": "cpp-exceptions-test2", "package_type": "package", "sha256": "5d5c8a58219d050452190b4fbe3a0577c9da2ac557822a977d34c08b1ff4cac9", "shared_library": false, "unvendored_tests": false, "version": "1.0"}, "cramjam": {"depends": [], "file_name": "cramjam-2.8.3-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["cramjam"], "install_dir": "site", "name": "cramjam", "package_type": "package", "sha256": "42c509a8c042b90f8d39b2b428d7512e40110b6bc8bff417ff5f345fba3860bd", "shared_library": false, "unvendored_tests": false, "version": "2.8.3"}, "crc32c": {"depends": [], "file_name": "crc32c-2.4-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["crc32c"], "install_dir": "site", "name": "crc32c", "package_type": "package", "sha256": "c0703c9b40d31758e7d836a2f0657c343a8a60d2e09bb2826e0d01febe41b6a4", "shared_library": false, "unvendored_tests": false, "version": "2.4"}, "cryptography": {"depends": ["openssl", "six", "cffi"], "file_name": "cryptography-42.0.5-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["cryptography"], "install_dir": "site", "name": "cryptography", "package_type": "package", "sha256": "c05ea45f7aa36950b2f7c4216147e51abd6e6899656c512e106c7043bc7772d9", "shared_library": false, "unvendored_tests": false, "version": "42.0.5"}, "cssselect": {"depends": [], "file_name": "cssselect-1.2.0-py2.py3-none-any.whl", "imports": ["cssselect"], "install_dir": "site", "name": "cssselect", "package_type": "package", "sha256": "a835c843cac791f67be9d6ad2eabe0d2690cab0c147902ffe604018271bc557c", "shared_library": false, "unvendored_tests": false, "version": "1.2.0"}, "cvxpy-base": {"depends": ["numpy", "scipy", "clarabel"], "file_name": "cvxpy_base-1.5.1-py3-none-any.whl", "imports": ["cvxpy"], "install_dir": "site", "name": "cvxpy-base", "package_type": "package", "sha256": "43dcbeee1e7875516cdf6d3a227cc9d6720b91dc0765c2f4a2dfe1a297607324", "shared_library": false, "unvendored_tests": true, "version": "1.5.1"}, "cvxpy-base-tests": {"depends": ["cvxpy-base"], "file_name": "cvxpy-base-tests.tar", "imports": [], "install_dir": "site", "name": "cvxpy-base-tests", "package_type": "package", "sha256": "a18ac6cec0d4a36e5297d9920717bfdab1db27b56ae9aae245c04051b8bf6990", "shared_library": false, "unvendored_tests": false, "version": "1.5.1"}, "cycler": {"depends": ["six"], "file_name": "cycler-0.12.1-py3-none-any.whl", "imports": ["cycler"], "install_dir": "site", "name": "cycler", "package_type": "package", "sha256": "62243ceb501f58ad420395814f88d259d7546d115bd652e67d281b476b17c96e", "shared_library": false, "unvendored_tests": false, "version": "0.12.1"}, "cysignals": {"depends": [], "file_name": "cysignals-1.11.4-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["cysignals"], "install_dir": "site", "name": "cysignals", "package_type": "package", "sha256": "ff6b27611229d4fffd3ff5f9a8d88854e5181441a2e9c2e337e6bc79ee14de5e", "shared_library": false, "unvendored_tests": false, "version": "1.11.4"}, "cytoolz": {"depends": ["toolz"], "file_name": "cytoolz-0.12.3-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["cytoolz"], "install_dir": "site", "name": "cytoolz", "package_type": "package", "sha256": "3db082ceb3c2e49842ad8065d5d9a48cadfa58752d0ee00cf0d9b86cb4b3cf8c", "shared_library": false, "unvendored_tests": true, "version": "0.12.3"}, "cytoolz-tests": {"depends": ["cytoolz"], "file_name": "cytoolz-tests.tar", "imports": [], "install_dir": "site", "name": "cytoolz-tests", "package_type": "package", "sha256": "9b8bae8b847080f2530f764d63b4a87df456f96a63eadb2eefc8884a47beee2b", "shared_library": false, "unvendored_tests": false, "version": "0.12.3"}, "decorator": {"depends": [], "file_name": "decorator-5.1.1-py3-none-any.whl", "imports": ["decorator"], "install_dir": "site", "name": "decorator", "package_type": "package", "sha256": "e7b2576b7ab0f7fab4a8260ce091e610dedeb2f7874c328db3920c5b1d06a57e", "shared_library": false, "unvendored_tests": false, "version": "5.1.1"}, "demes": {"depends": ["attrs", "ruamel.yaml"], "file_name": "demes-0.2.3-py3-none-any.whl", "imports": ["demes"], "install_dir": "site", "name": "demes", "package_type": "package", "sha256": "8be66f0c28a713b8efc6626b4aeb7cdeea70818b2ff3877ebb731a0e6a638fdd", "shared_library": false, "unvendored_tests": false, "version": "0.2.3"}, "deprecation": {"depends": ["packaging"], "file_name": "deprecation-2.1.0-py2.py3-none-any.whl", "imports": ["deprecation"], "install_dir": "site", "name": "deprecation", "package_type": "package", "sha256": "7e29e9de88b1bb7319e512cf74e474e47fe216978df72fe696504c464f564088", "shared_library": false, "unvendored_tests": false, "version": "2.1.0"}, "distlib": {"depends": [], "file_name": "distlib-0.3.8-py2.py3-none-any.whl", "imports": ["distlib"], "install_dir": "site", "name": "distlib", "package_type": "package", "sha256": "c38f21e1668748621aa187e1d77017a072cad344df5b17e855c87d7b29cbeb56", "shared_library": false, "unvendored_tests": false, "version": "0.3.8"}, "docutils": {"depends": [], "file_name": "docutils-0.21.1-py3-none-any.whl", "imports": ["docutils"], "install_dir": "site", "name": "docutils", "package_type": "package", "sha256": "820ce56834fd002d80f0512070f7d71565f076de184287a491cbad6273e5a76c", "shared_library": false, "unvendored_tests": false, "version": "0.21.1"}, "ewah-bool-utils": {"depends": [], "file_name": "ewah_bool_utils-1.2.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["ewah_bool_utils"], "install_dir": "site", "name": "ewah_bool_utils", "package_type": "package", "sha256": "2d64e4cc33e22bc6e54a3cea53f6b7b156f9b5d24c81a012eaab449edb64b2bd", "shared_library": false, "unvendored_tests": true, "version": "1.2.0"}, "ewah-bool-utils-tests": {"depends": ["ewah_bool_utils"], "file_name": "ewah_bool_utils-tests.tar", "imports": [], "install_dir": "site", "name": "ewah_bool_utils-tests", "package_type": "package", "sha256": "1bb3b4036603e5e7a1209236f78105e7036af3b0b615dd38b2bc2c92b60232e8", "shared_library": false, "unvendored_tests": false, "version": "1.2.0"}, "exceptiongroup": {"depends": [], "file_name": "exceptiongroup-1.2.1-py3-none-any.whl", "imports": ["exceptiongroup"], "install_dir": "site", "name": "exceptiongroup", "package_type": "package", "sha256": "92b9f147b8f6e461cf0caf268db6a6e2ee7efb228d60d80f7dd92d521d59e469", "shared_library": false, "unvendored_tests": false, "version": "1.2.1"}, "executing": {"depends": [], "file_name": "executing-2.0.1-py2.py3-none-any.whl", "imports": ["executing"], "install_dir": "site", "name": "executing", "package_type": "package", "sha256": "9d446583b446b5795bc02ae5e92eebd5ffba061287b3940f45462f2612f47b6a", "shared_library": false, "unvendored_tests": false, "version": "2.0.1"}, "fastparquet": {"depends": ["cramjam", "numpy", "pandas", "fsspec", "packaging"], "file_name": "fastparquet-2024.2.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["fastparquet"], "install_dir": "site", "name": "fastparquet", "package_type": "package", "sha256": "ea0392fe11e9fbdea79ad8199d13a38798eb9981413e08539e6bbd33d17b85be", "shared_library": false, "unvendored_tests": false, "version": "2024.2.0"}, "fiona": {"depends": ["attrs", "certifi", "setuptools", "six", "click", "cligj"], "file_name": "fiona-1.9.5-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["fiona"], "install_dir": "site", "name": "fiona", "package_type": "package", "sha256": "0f55d6c5d5b09d420e2b58d010967b5e2e43c1ffdf3aa1d559951ac10d893655", "shared_library": false, "unvendored_tests": true, "version": "1.9.5"}, "fiona-tests": {"depends": ["fiona"], "file_name": "fiona-tests.tar", "imports": [], "install_dir": "site", "name": "fiona-tests", "package_type": "package", "sha256": "6b82496111cea9551fa09174c70c47c12ceb6e5885c8511683e3bbf7b7e29ff5", "shared_library": false, "unvendored_tests": false, "version": "1.9.5"}, "fonttools": {"depends": [], "file_name": "fonttools-4.51.0-py3-none-any.whl", "imports": ["fontTools"], "install_dir": "site", "name": "fonttools", "package_type": "package", "sha256": "e27bd9df5b39f6210c66571b12aa2372310e9e96aee0b605fc5021716b5f3249", "shared_library": false, "unvendored_tests": false, "version": "4.51.0"}, "fpcast-test": {"depends": [], "file_name": "fpcast_test-0.1.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["fpcast_test"], "install_dir": "site", "name": "fpcast-test", "package_type": "package", "sha256": "0f72430fbccb73c6690a931413032f9c1892bd07b7af2ba59f32374ec4970756", "shared_library": false, "unvendored_tests": false, "version": "0.1.1"}, "freesasa": {"depends": [], "file_name": "freesasa-2.2.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["freesasa"], "install_dir": "site", "name": "freesasa", "package_type": "package", "sha256": "d3d478c7aa17ca7b6caf6609cc3152929f4cb43d20fdda7217e648aad96acf0e", "shared_library": false, "unvendored_tests": false, "version": "2.2.1"}, "frozenlist": {"depends": [], "file_name": "frozenlist-1.4.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["frozenlist"], "install_dir": "site", "name": "frozenlist", "package_type": "package", "sha256": "481ab66c7f7b932d8fadfadece1bd9928c0ee471da75cff2baf22845baea2a2c", "shared_library": false, "unvendored_tests": false, "version": "1.4.1"}, "fsspec": {"depends": [], "file_name": "fsspec-2024.3.1-py3-none-any.whl", "imports": ["fsspec"], "install_dir": "site", "name": "fsspec", "package_type": "package", "sha256": "2f1439e76d695b8414d89c7c85cdb0ce0f227be1ef083f07e8c9452e0718d9c8", "shared_library": false, "unvendored_tests": true, "version": "2024.3.1"}, "fsspec-tests": {"depends": ["fsspec"], "file_name": "fsspec-tests.tar", "imports": [], "install_dir": "site", "name": "fsspec-tests", "package_type": "package", "sha256": "0f777d658d32926b150c87c88b5e839545d6ad88320818027908ac83cf7bd8de", "shared_library": false, "unvendored_tests": false, "version": "2024.3.1"}, "future": {"depends": [], "file_name": "future-1.0.0-py3-none-any.whl", "imports": ["future"], "install_dir": "site", "name": "future", "package_type": "package", "sha256": "445e96936c4f8ae76ddb2fa505308eeda42af28db4584037634318c3ebaf9d03", "shared_library": false, "unvendored_tests": true, "version": "1.0.0"}, "future-tests": {"depends": ["future"], "file_name": "future-tests.tar", "imports": [], "install_dir": "site", "name": "future-tests", "package_type": "package", "sha256": "eb8fedb6b9848fa3ab6fa1362f81b7d1c5e8c89773783d923584b95a3b97547f", "shared_library": false, "unvendored_tests": false, "version": "1.0.0"}, "galpy": {"depends": ["numpy", "scipy", "matplotlib", "astropy", "future", "setuptools"], "file_name": "galpy-1.9.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["galpy"], "install_dir": "site", "name": "galpy", "package_type": "package", "sha256": "8f5af7d9d1c7a558fe0ac137ad88f59185bdf30dec8649f291403eceff248b98", "shared_library": false, "unvendored_tests": false, "version": "1.9.2"}, "gdal": {"depends": ["geos"], "file_name": "gdal-3.8.3.zip", "imports": [], "install_dir": "dynlib", "name": "gdal", "package_type": "shared_library", "sha256": "30401f5d6894f73556a95de723c278de64c617dc35a10894b77154c94292b572", "shared_library": true, "unvendored_tests": false, "version": "3.8.3"}, "gensim": {"depends": ["numpy", "scipy", "six", "smart_open", "wrapt"], "file_name": "gensim-4.3.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["gensim"], "install_dir": "site", "name": "gensim", "package_type": "package", "sha256": "3c4b346db7bc0fd0174881be499333eef4aade2aca690beeef4a1a5fd05b6815", "shared_library": false, "unvendored_tests": true, "version": "4.3.2"}, "gensim-tests": {"depends": ["gensim"], "file_name": "gensim-tests.tar", "imports": [], "install_dir": "site", "name": "gensim-tests", "package_type": "package", "sha256": "5ceb546ac41bb973d08be7c44a5732ce29f5720b5f35102149e4f6961223e19d", "shared_library": false, "unvendored_tests": false, "version": "4.3.2"}, "geopandas": {"depends": ["shapely", "fiona", "pyproj", "packaging", "pandas"], "file_name": "geopandas-0.14.3-py3-none-any.whl", "imports": ["geopandas"], "install_dir": "site", "name": "geopandas", "package_type": "package", "sha256": "ad8eade2c6f45ba17c878a302910ebc3d6f7cecd009cdb5d63d140781afb4a21", "shared_library": false, "unvendored_tests": true, "version": "0.14.3"}, "geopandas-tests": {"depends": ["geopandas"], "file_name": "geopandas-tests.tar", "imports": [], "install_dir": "site", "name": "geopandas-tests", "package_type": "package", "sha256": "40703d011365f2763e7dd7514be85e65af8f488671ab4f1aaaacc7ad1a14e23e", "shared_library": false, "unvendored_tests": false, "version": "0.14.3"}, "geos": {"depends": [], "file_name": "geos-3.12.1.zip", "imports": [], "install_dir": "dynlib", "name": "geos", "package_type": "shared_library", "sha256": "150ef1387663f8ddebb9e2b2d49c556f60ccfe3d6a8c3b2334f22bd2e3ad9e52", "shared_library": true, "unvendored_tests": false, "version": "3.12.1"}, "gmpy2": {"depends": [], "file_name": "gmpy2-2.1.5-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["gmpy2"], "install_dir": "site", "name": "gmpy2", "package_type": "package", "sha256": "60b06b4d6ad774cd76ce94dea287cab3d27fe846477ce5f1e5db58e9ebe7596b", "shared_library": false, "unvendored_tests": false, "version": "2.1.5"}, "gsw": {"depends": ["numpy"], "file_name": "gsw-3.6.17-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["gsw"], "install_dir": "site", "name": "gsw", "package_type": "package", "sha256": "abba76d5a7da89cd64646e7856599f31621ae9f48951cad5eac9ed75ab3ee031", "shared_library": false, "unvendored_tests": true, "version": "3.6.17"}, "gsw-tests": {"depends": ["gsw"], "file_name": "gsw-tests.tar", "imports": [], "install_dir": "site", "name": "gsw-tests", "package_type": "package", "sha256": "c1dcfb0baf3f2891f68ed569ed7f08264bca69cc210e1681d9628b64ce42b02d", "shared_library": false, "unvendored_tests": false, "version": "3.6.17"}, "h5py": {"depends": ["numpy", "pkgconfig"], "file_name": "h5py-3.11.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["h5py"], "install_dir": "site", "name": "h5py", "package_type": "package", "sha256": "5d7604354ff24428521620d75352946656375e7a725e7040c976f7be0a908055", "shared_library": false, "unvendored_tests": true, "version": "3.11.0"}, "h5py-tests": {"depends": ["h5py"], "file_name": "h5py-tests.tar", "imports": [], "install_dir": "site", "name": "h5py-tests", "package_type": "package", "sha256": "6f4d260fb05e96386f5091941bb520c804447436983e24901d4e7ba831ed15e7", "shared_library": false, "unvendored_tests": false, "version": "3.11.0"}, "hashlib": {"depends": ["openssl"], "file_name": "hashlib-1.0.0.zip", "imports": ["_hashlib"], "install_dir": "stdlib", "name": "hashlib", "package_type": "cpython_module", "sha256": "2608deda99041715fec1152b2d2d377f591035fcab44a76e270a898b9f70f580", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "html5lib": {"depends": ["webencodings", "six"], "file_name": "html5lib-1.1-py2.py3-none-any.whl", "imports": ["html5lib"], "install_dir": "site", "name": "html5lib", "package_type": "package", "sha256": "58e4002edf04a42f3ec887c5b68c432b21427603b4d1090e379259f6678a3d58", "shared_library": false, "unvendored_tests": false, "version": "1.1"}, "idna": {"depends": [], "file_name": "idna-3.7-py3-none-any.whl", "imports": ["idna"], "install_dir": "site", "name": "idna", "package_type": "package", "sha256": "9fda8aaea4574988fcd20f729a3b6df5b22488245ef347ec63bfe794325d4def", "shared_library": false, "unvendored_tests": false, "version": "3.7"}, "igraph": {"depends": ["texttable"], "file_name": "igraph-0.11.4-cp39-abi3-pyodide_2024_0_wasm32.whl", "imports": ["igraph"], "install_dir": "site", "name": "igraph", "package_type": "package", "sha256": "d6030d268459626e1db94e26ec6f8d372e808e9a9cdf4d684cbe6bb2e6afa866", "shared_library": false, "unvendored_tests": false, "version": "0.11.4"}, "imageio": {"depends": ["numpy", "pillow"], "file_name": "imageio-2.34.1-py3-none-any.whl", "imports": ["imageio"], "install_dir": "site", "name": "imageio", "package_type": "package", "sha256": "052dc45002387ef8b9fd79693c99e67591bcaaf1ca9a82cb67f0de348325122b", "shared_library": false, "unvendored_tests": false, "version": "2.34.1"}, "iniconfig": {"depends": [], "file_name": "iniconfig-2.0.0-py3-none-any.whl", "imports": ["iniconfig"], "install_dir": "site", "name": "iniconfig", "package_type": "package", "sha256": "f9cab05fb8a8d99890626831d140b0f9c26c44ed38a520b89c42ff07afef929d", "shared_library": false, "unvendored_tests": false, "version": "2.0.0"}, "ipython": {"depends": ["asttokens", "decorator", "executing", "matplotlib-inline", "prompt_toolkit", "pure_eval", "pygments", "six", "stack_data", "traitlets", "sqlite3", "wcwidth"], "file_name": "ipython-8.23.0-py3-none-any.whl", "imports": ["IPython"], "install_dir": "site", "name": "ipython", "package_type": "package", "sha256": "cff64d70b073fb2dcf718ee4abd47767373171b864e3d30f890f1573f0654c22", "shared_library": false, "unvendored_tests": true, "version": "8.23.0"}, "ipython-tests": {"depends": ["ipython"], "file_name": "ipython-tests.tar", "imports": [], "install_dir": "site", "name": "ipython-tests", "package_type": "package", "sha256": "b5a49455fa364805cfd9b765a1c68df0dc12cedd79e25ba4096cbe94f04bf10d", "shared_library": false, "unvendored_tests": false, "version": "8.23.0"}, "jedi": {"depends": ["parso"], "file_name": "jedi-0.19.1-py2.py3-none-any.whl", "imports": ["jedi"], "install_dir": "site", "name": "jedi", "package_type": "package", "sha256": "5ee59883b4346dcc0c88adc8973f1dc635b38779f17595a7abec794cc09e8840", "shared_library": false, "unvendored_tests": true, "version": "0.19.1"}, "jedi-tests": {"depends": ["jedi"], "file_name": "jedi-tests.tar", "imports": [], "install_dir": "site", "name": "jedi-tests", "package_type": "package", "sha256": "ca8d52714ffade10e237eed44cb8d359ade5ae6b92d8c7ba0ff66d00161f9dff", "shared_library": false, "unvendored_tests": false, "version": "0.19.1"}, "jinja2": {"depends": ["markupsafe"], "file_name": "Jinja2-3.1.3-py3-none-any.whl", "imports": ["jinja2"], "install_dir": "site", "name": "Jinja2", "package_type": "package", "sha256": "ed3b38b217a040a4dd6dd5f62fca8d0a18ab68f3d5c5a8fef12dcdfeaa9a4373", "shared_library": false, "unvendored_tests": false, "version": "3.1.3"}, "joblib": {"depends": [], "file_name": "joblib-1.4.0-py3-none-any.whl", "imports": ["joblib"], "install_dir": "site", "name": "joblib", "package_type": "package", "sha256": "e913d6bb8a168be5a89e76764eacbb56f8e93f99c8e19e93197da2a4f0331e3f", "shared_library": false, "unvendored_tests": true, "version": "1.4.0"}, "joblib-tests": {"depends": ["joblib"], "file_name": "joblib-tests.tar", "imports": [], "install_dir": "site", "name": "joblib-tests", "package_type": "package", "sha256": "a0e85b342cc9fdb888eef3328a7e99a0740f6a774953276f0a082793a3e10981", "shared_library": false, "unvendored_tests": false, "version": "1.4.0"}, "jsonschema": {"depends": ["attrs", "pyrsistent", "referencing", "jsonschema_specifications"], "file_name": "jsonschema-4.21.1-py3-none-any.whl", "imports": ["jsonschema"], "install_dir": "site", "name": "jsonschema", "package_type": "package", "sha256": "8e103c1dd50ecd40e385b2167ebb00182ed3aa3b455cd88d1edab5243c521503", "shared_library": false, "unvendored_tests": true, "version": "4.21.1"}, "jsonschema-specifications": {"depends": [], "file_name": "jsonschema_specifications-2023.12.1-py3-none-any.whl", "imports": ["jsonschema_specifications"], "install_dir": "site", "name": "jsonschema_specifications", "package_type": "package", "sha256": "40589d9387803ddaf07c51e0a935f6fd0af653826182dfc2eda0e6171320f83b", "shared_library": false, "unvendored_tests": true, "version": "2023.12.1"}, "jsonschema-specifications-tests": {"depends": ["jsonschema_specifications"], "file_name": "jsonschema_specifications-tests.tar", "imports": [], "install_dir": "site", "name": "jsonschema_specifications-tests", "package_type": "package", "sha256": "1aa663daca70e3b7560afb0097d1bcfd7cbea9f5fcd6cb290a020e66e1726f88", "shared_library": false, "unvendored_tests": false, "version": "2023.12.1"}, "jsonschema-tests": {"depends": ["jsonschema"], "file_name": "jsonschema-tests.tar", "imports": [], "install_dir": "site", "name": "jsonschema-tests", "package_type": "package", "sha256": "4f2b82f097f9379d0029c442fa67ed87fc37e3d53045dff293bb9f8491f96857", "shared_library": false, "unvendored_tests": false, "version": "4.21.1"}, "kiwisolver": {"depends": [], "file_name": "kiwisolver-1.4.5-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["kiwisolver"], "install_dir": "site", "name": "kiwisolver", "package_type": "package", "sha256": "93324048b98508b7c87c8827f7fb810803f4c19e1216d3f44ea39ebefce5d977", "shared_library": false, "unvendored_tests": false, "version": "1.4.5"}, "lakers-python": {"depends": [], "file_name": "lakers_python-0.3.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["lakers"], "install_dir": "site", "name": "lakers-python", "package_type": "package", "sha256": "a3ff1dd2c6b808ef58c25b889309a1183780faae47bc30a3d0c3fcf565225c46", "shared_library": false, "unvendored_tests": false, "version": "0.3.0"}, "lazy-loader": {"depends": [], "file_name": "lazy_loader-0.4-py3-none-any.whl", "imports": ["lazy_loader"], "install_dir": "site", "name": "lazy_loader", "package_type": "package", "sha256": "791a725032a6950412e9af99ea11e1c33767616f62fff82038dc5a1e011a2a15", "shared_library": false, "unvendored_tests": true, "version": "0.4"}, "lazy-loader-tests": {"depends": ["lazy_loader"], "file_name": "lazy_loader-tests.tar", "imports": [], "install_dir": "site", "name": "lazy_loader-tests", "package_type": "package", "sha256": "bb75854213b518faf51a33cf774b28c62db019a863e0c8b82336e15118402f07", "shared_library": false, "unvendored_tests": false, "version": "0.4"}, "lazy-object-proxy": {"depends": [], "file_name": "lazy_object_proxy-1.10.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["lazy_object_proxy"], "install_dir": "site", "name": "lazy-object-proxy", "package_type": "package", "sha256": "630987c74e6a8715032001b486625f6b5e319299e447b7ca9730bff8a476b49a", "shared_library": false, "unvendored_tests": false, "version": "1.10.0"}, "libcst": {"depends": ["pyyaml"], "file_name": "libcst-1.3.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["libcst"], "install_dir": "site", "name": "libcst", "package_type": "package", "sha256": "f503a45b3855bb1a008caf8f6ac1a71443bf66369cd6168dccc9f5331400a970", "shared_library": false, "unvendored_tests": true, "version": "1.3.1"}, "libcst-tests": {"depends": ["libcst"], "file_name": "libcst-tests.tar", "imports": [], "install_dir": "site", "name": "libcst-tests", "package_type": "package", "sha256": "61555281e0724435cf9ccf1722dfeb75776795c5d07dc143e06f0d8086e42700", "shared_library": false, "unvendored_tests": false, "version": "1.3.1"}, "libhdf5": {"depends": [], "file_name": "libhdf5-1.12.1.zip", "imports": [], "install_dir": "dynlib", "name": "libhdf5", "package_type": "shared_library", "sha256": "7cd1ee833910ded4bca697b2881f49e26d185bf84d5921baecdf84c6f3e78b8d", "shared_library": true, "unvendored_tests": false, "version": "1.12.1"}, "libheif": {"depends": [], "file_name": "libheif-1.12.0.zip", "imports": [], "install_dir": "dynlib", "name": "libheif", "package_type": "shared_library", "sha256": "ed954f71cd78d1fcf4f9aa93e34f598bbc9a87cc6a288c12f43b5dad800a85b2", "shared_library": true, "unvendored_tests": false, "version": "1.12.0"}, "libmagic": {"depends": [], "file_name": "libmagic-5.42.zip", "imports": [], "install_dir": "dynlib", "name": "libmagic", "package_type": "shared_library", "sha256": "b8c3aee549fcdb7484f24b5dd804192efc75f1de315523f44b626662cc807b67", "shared_library": true, "unvendored_tests": false, "version": "5.42"}, "libnetcdf": {"depends": [], "file_name": "libnetcdf-4.9.2.zip", "imports": [], "install_dir": "dynlib", "name": "libnetcdf", "package_type": "shared_library", "sha256": "25e03271a4ccc228f092d03d6e7001b622d87069f82b255781aaea09f793adaa", "shared_library": true, "unvendored_tests": false, "version": "4.9.2"}, "lightgbm": {"depends": ["numpy", "scipy", "scikit-learn"], "file_name": "lightgbm-4.3.0-py3-none-pyodide_2024_0_wasm32.whl", "imports": ["lightgbm"], "install_dir": "site", "name": "lightgbm", "package_type": "package", "sha256": "3bf6ce78f0341aa9f2ba194f61222bc1e91b1a60e2e2c46bc7bbd6fb5e8534b0", "shared_library": false, "unvendored_tests": false, "version": "4.3.0"}, "logbook": {"depends": ["ssl"], "file_name": "Logbook-1.7.0.post0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["logbook"], "install_dir": "site", "name": "logbook", "package_type": "package", "sha256": "ebdfee44251e45c6a3b7804f8742a477d374c732ec7851552e4f25eb267c1aef", "shared_library": false, "unvendored_tests": false, "version": "1.7.0.post0"}, "lxml": {"depends": [], "file_name": "lxml-5.2.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["lxml"], "install_dir": "site", "name": "lxml", "package_type": "package", "sha256": "71420ee4af4188f59c3e7acdf1d7cab4f4e2d10f9ec1bf4b1742f9075d4b36a2", "shared_library": false, "unvendored_tests": false, "version": "5.2.1"}, "lzma": {"depends": [], "file_name": "lzma-1.0.0.zip", "imports": ["lzma", "_lzma"], "install_dir": "stdlib", "name": "lzma", "package_type": "cpython_module", "sha256": "95f2169b9c57112556c5fc907c3429b572a204cf210048a9d65456ad8e3f4c14", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "markupsafe": {"depends": [], "file_name": "MarkupSafe-2.1.5-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["markupsafe"], "install_dir": "site", "name": "MarkupSafe", "package_type": "package", "sha256": "f2e79b5b66389a43f8381cece4b7dc03df1a28f9d083abe4e964f33bf9e9b72c", "shared_library": false, "unvendored_tests": false, "version": "2.1.5"}, "matplotlib": {"depends": ["cycler", "fonttools", "kiwisolver", "numpy", "packaging", "pillow", "pyparsing", "python-dateutil", "pytz", "matplotlib-pyodide"], "file_name": "matplotlib-3.5.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pylab", "mpl_toolkits", "matplotlib"], "install_dir": "site", "name": "matplotlib", "package_type": "package", "sha256": "670024b6ec06a27fe933dda6cbca5140497ff67d80c70f70b6e6a2d4ccef9b5d", "shared_library": false, "unvendored_tests": true, "version": "3.5.2"}, "matplotlib-inline": {"depends": ["traitlets"], "file_name": "matplotlib_inline-0.1.7-py3-none-any.whl", "imports": ["matplotlib-inline"], "install_dir": "site", "name": "matplotlib-inline", "package_type": "package", "sha256": "01eae0298c3b9d145a69317bbf9622c145130683bd5419b7112f6c2dcaed988a", "shared_library": false, "unvendored_tests": false, "version": "0.1.7"}, "matplotlib-pyodide": {"depends": [], "file_name": "matplotlib_pyodide-0.2.2-py3-none-any.whl", "imports": ["matplotlib_pyodide"], "install_dir": "site", "name": "matplotlib-pyodide", "package_type": "package", "sha256": "07d56729d9625b2b9bb9778a92c88c5c750476abb80f58d71b1386fed434eb8c", "shared_library": false, "unvendored_tests": false, "version": "0.2.2"}, "matplotlib-tests": {"depends": ["matplotlib"], "file_name": "matplotlib-tests.tar", "imports": [], "install_dir": "site", "name": "matplotlib-tests", "package_type": "package", "sha256": "47377f81b9aa221e30824c3edb8cf81268603a578fb6351aab69ec71da799b20", "shared_library": false, "unvendored_tests": false, "version": "3.5.2"}, "memory-allocator": {"depends": [], "file_name": "memory_allocator-0.1.4-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["memory_allocator"], "install_dir": "site", "name": "memory-allocator", "package_type": "package", "sha256": "b1e90dba5ac8b79c66a9677d52dd2c4ba15320151196c7cc9f30aacafb8752f0", "shared_library": false, "unvendored_tests": false, "version": "0.1.4"}, "micropip": {"depends": ["packaging"], "file_name": "micropip-0.6.0-py3-none-any.whl", "imports": ["micropip"], "install_dir": "site", "name": "micropip", "package_type": "package", "sha256": "1a3c889a69e6b2a15456f183e7711bd54175930cbe7ba09e91bec92cac8c418a", "shared_library": false, "unvendored_tests": false, "version": "0.6.0"}, "mmh3": {"depends": [], "file_name": "mmh3-4.1.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["mmh3"], "install_dir": "site", "name": "mmh3", "package_type": "package", "sha256": "ebd23d16d23dd0b2471857f6aa239bd68bfd1fe88a35072dce95ad9c0fb377df", "shared_library": false, "unvendored_tests": false, "version": "4.1.0"}, "mne": {"depends": ["numpy", "scipy", "setuptools", "decorator", "lazy_loader", "packaging"], "file_name": "mne-1.7.0-py3-none-any.whl", "imports": ["mne"], "install_dir": "site", "name": "mne", "package_type": "package", "sha256": "8086f8a7cb973332e29c253c9d60f9807c2384fba15b47b8d875786f6191366f", "shared_library": false, "unvendored_tests": true, "version": "1.7.0"}, "mne-tests": {"depends": ["mne"], "file_name": "mne-tests.tar", "imports": [], "install_dir": "site", "name": "mne-tests", "package_type": "package", "sha256": "7e5c8b54e62641797d2dfed22aed6cf8336135cf65008a3df2b7addb0c1e5015", "shared_library": false, "unvendored_tests": false, "version": "1.7.0"}, "more-itertools": {"depends": [], "file_name": "more_itertools-10.2.0-py3-none-any.whl", "imports": ["more_itertools"], "install_dir": "site", "name": "more-itertools", "package_type": "package", "sha256": "31e7d9b869d4cc1507cbd8ab9883dc52f04cfc60edeb867faa8a43199ee2dfd4", "shared_library": false, "unvendored_tests": false, "version": "10.2.0"}, "mpmath": {"depends": [], "file_name": "mpmath-1.3.0-py3-none-any.whl", "imports": ["mpmath"], "install_dir": "site", "name": "mpmath", "package_type": "package", "sha256": "9fd7b1f3a8a915006c2b48071c89ba620780c714d7e60560d9095f38bb440d9d", "shared_library": false, "unvendored_tests": true, "version": "1.3.0"}, "mpmath-tests": {"depends": ["mpmath"], "file_name": "mpmath-tests.tar", "imports": [], "install_dir": "site", "name": "mpmath-tests", "package_type": "package", "sha256": "c05a226349ebd546b5295ff3a43205e2180cfd552a1fa93d10cbea8763ac8053", "shared_library": false, "unvendored_tests": false, "version": "1.3.0"}, "msgpack": {"depends": [], "file_name": "msgpack-1.0.8-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["msgpack"], "install_dir": "site", "name": "msgpack", "package_type": "package", "sha256": "1e1b95c34b429d9ce044703050035fe1afed561fcbafb5615f9d0ce6d0b243d6", "shared_library": false, "unvendored_tests": false, "version": "1.0.8"}, "msgspec": {"depends": [], "file_name": "msgspec-0.18.6-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["msgspec"], "install_dir": "site", "name": "msgspec", "package_type": "package", "sha256": "8a3ada2ad782421c91e46dfe3bdc88279a9f9640874c774c7eb664f49b4f546e", "shared_library": false, "unvendored_tests": false, "version": "0.18.6"}, "msprime": {"depends": ["numpy", "newick", "tskit", "demes", "rpds-py"], "file_name": "msprime-1.3.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["msprime"], "install_dir": "site", "name": "msprime", "package_type": "package", "sha256": "a5f301b280e9821ae0994fb8dfbc547b41e12a6897e51139c4195de3682f922b", "shared_library": false, "unvendored_tests": false, "version": "1.3.1"}, "multidict": {"depends": [], "file_name": "multidict-6.0.5-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["multidict"], "install_dir": "site", "name": "multidict", "package_type": "package", "sha256": "01a44293972db77a7d74872a37dc32fc57e127ac6c3e92d6c70b039f4656d1f5", "shared_library": false, "unvendored_tests": false, "version": "6.0.5"}, "munch": {"depends": ["setuptools", "six"], "file_name": "munch-4.0.0-py2.py3-none-any.whl", "imports": ["munch"], "install_dir": "site", "name": "munch", "package_type": "package", "sha256": "107c09e48dd9dab92ced1bb625eb714396188b747775ae08f0b289839ac9d08e", "shared_library": false, "unvendored_tests": false, "version": "4.0.0"}, "mypy": {"depends": [], "file_name": "mypy-1.9.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["mypyc", "mypy"], "install_dir": "site", "name": "mypy", "package_type": "package", "sha256": "a0959e7167e1c1d2ca3f015a3b37462c8469a5846960e71db85c6f9700966b09", "shared_library": false, "unvendored_tests": true, "version": "1.9.0"}, "mypy-tests": {"depends": ["mypy"], "file_name": "mypy-tests.tar", "imports": [], "install_dir": "site", "name": "mypy-tests", "package_type": "package", "sha256": "901440be6cfa6a63bd22258515f8997855bf9e358846cbc3424eb630a29f987a", "shared_library": false, "unvendored_tests": false, "version": "1.9.0"}, "netcdf4": {"depends": ["numpy", "packaging", "h5py", "cftime", "certifi"], "file_name": "netCDF4-1.6.5-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["netCDF4"], "install_dir": "site", "name": "netcdf4", "package_type": "package", "sha256": "2b7af5d41dded09350659179b4e5e119cb23652952e08eba560629b38dad52c4", "shared_library": false, "unvendored_tests": false, "version": "1.6.5"}, "networkx": {"depends": ["decorator", "setuptools", "matplotlib", "numpy"], "file_name": "networkx-3.3-py3-none-any.whl", "imports": ["networkx"], "install_dir": "site", "name": "networkx", "package_type": "package", "sha256": "0a39e7e4000d95224d4baf7d9e22c4e837fc67da2e0d39a9bb68bfca50860131", "shared_library": false, "unvendored_tests": true, "version": "3.3"}, "networkx-tests": {"depends": ["networkx"], "file_name": "networkx-tests.tar", "imports": [], "install_dir": "site", "name": "networkx-tests", "package_type": "package", "sha256": "d8bfd615ab6db81a3c8db5afabe78c6c61c80a7994b273aa69d26fdabc2675e8", "shared_library": false, "unvendored_tests": false, "version": "3.3"}, "newick": {"depends": [], "file_name": "newick-1.9.0-py2.py3-none-any.whl", "imports": ["newick"], "install_dir": "site", "name": "newick", "package_type": "package", "sha256": "fd7c551780ac51fbf27e0b1b1efada288a79bfc8b66afc5ea21cd42a7906085e", "shared_library": false, "unvendored_tests": false, "version": "1.9.0"}, "nh3": {"depends": [], "file_name": "nh3-0.2.17-cp37-abi3-pyodide_2024_0_wasm32.whl", "imports": ["nh3"], "install_dir": "site", "name": "nh3", "package_type": "package", "sha256": "ed8c980917c2e5cae0e37fd037fee7115119c27d6eab471662efb1ab6660a284", "shared_library": false, "unvendored_tests": false, "version": "0.2.17"}, "nlopt": {"depends": ["numpy"], "file_name": "nlopt-2.7.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["nlopt"], "install_dir": "site", "name": "nlopt", "package_type": "package", "sha256": "d7b47dd14f8a4d64d7f5a23ebe2d92597fa37492886dc91ce3433cf08d0af1d5", "shared_library": false, "unvendored_tests": false, "version": "2.7.0"}, "nltk": {"depends": ["regex", "sqlite3"], "file_name": "nltk-3.8.1-py3-none-any.whl", "imports": ["nltk"], "install_dir": "site", "name": "nltk", "package_type": "package", "sha256": "063ce4e517cf219b990c6ea452cf46f28b798fd46d7641c74d07a6d49ed8d29c", "shared_library": false, "unvendored_tests": true, "version": "3.8.1"}, "nltk-tests": {"depends": ["nltk"], "file_name": "nltk-tests.tar", "imports": [], "install_dir": "site", "name": "nltk-tests", "package_type": "package", "sha256": "83ea5fe1cc7ff21cd0e7ab455eadd2a69e207955640ac7e7274eddf5df01625e", "shared_library": false, "unvendored_tests": false, "version": "3.8.1"}, "numcodecs": {"depends": ["numpy", "msgpack"], "file_name": "numcodecs-0.11.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["numcodecs"], "install_dir": "site", "name": "numcodecs", "package_type": "package", "sha256": "9c7b7254d00fd62b7effd5b31786bb19f1509530df671a090a5913ff5c3e1e44", "shared_library": false, "unvendored_tests": true, "version": "0.11.0"}, "numcodecs-tests": {"depends": ["numcodecs"], "file_name": "numcodecs-tests.tar", "imports": [], "install_dir": "site", "name": "numcodecs-tests", "package_type": "package", "sha256": "ec0ab47c1ac88f3fb08eb7291e2c8bbd90339809dac5066c744fb0a7c2300859", "shared_library": false, "unvendored_tests": false, "version": "0.11.0"}, "numpy": {"depends": [], "file_name": "numpy-1.26.4-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["numpy"], "install_dir": "site", "name": "numpy", "package_type": "package", "sha256": "4aeba609614f88fbb49d31bdafbc3f8e18e3ae4ba6d2b710c5281e5d22b64f9a", "shared_library": false, "unvendored_tests": true, "version": "1.26.4"}, "numpy-tests": {"depends": ["numpy"], "file_name": "numpy-tests.tar", "imports": [], "install_dir": "site", "name": "numpy-tests", "package_type": "package", "sha256": "95ee5fe4134dc7b045637150374154a2034430e0b48ae522d59496a6c81a16df", "shared_library": false, "unvendored_tests": false, "version": "1.26.4"}, "openblas": {"depends": [], "file_name": "openblas-0.3.26.zip", "imports": [], "install_dir": "dynlib", "name": "openblas", "package_type": "shared_library", "sha256": "bdc0f6c43169c8cd80a6f708d873fd441e6e475f3615476907f8865c3efd5668", "shared_library": true, "unvendored_tests": false, "version": "0.3.26"}, "opencv-python": {"depends": ["numpy"], "file_name": "opencv_python-4.9.0.80-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["cv2"], "install_dir": "site", "name": "opencv-python", "package_type": "package", "sha256": "50b8041c16f52608e17132ca5149bbc88495a030a19d88ce5502a8cf6abbf618", "shared_library": false, "unvendored_tests": false, "version": "4.9.0.80"}, "openssl": {"depends": [], "file_name": "openssl-1.1.1n.zip", "imports": [], "install_dir": "dynlib", "name": "openssl", "package_type": "shared_library", "sha256": "59303d428657ee5466221b3f778fc425149387a89d3330859af53be2796ff95d", "shared_library": true, "unvendored_tests": false, "version": "1.1.1n"}, "optlang": {"depends": ["sympy", "six", "swiglpk"], "file_name": "optlang-1.8.1-py2.py3-none-any.whl", "imports": ["optlang"], "install_dir": "site", "name": "optlang", "package_type": "package", "sha256": "c0f07f5eaf66e64a6c42d0061032f86c670b4e1af96514196f2d2c3f3a71e70a", "shared_library": false, "unvendored_tests": true, "version": "1.8.1"}, "optlang-tests": {"depends": ["optlang"], "file_name": "optlang-tests.tar", "imports": [], "install_dir": "site", "name": "optlang-tests", "package_type": "package", "sha256": "cf7f754efeb1bf3195e16c5cce5eb13c1716db18dda20d4fc88683c9e49427a6", "shared_library": false, "unvendored_tests": false, "version": "1.8.1"}, "orjson": {"depends": [], "file_name": "orjson-3.10.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["orjson"], "install_dir": "site", "name": "orjson", "package_type": "package", "sha256": "b12cded1997656c848609705f31a1d0d91ab4e53000365acec899c7cb9488deb", "shared_library": false, "unvendored_tests": false, "version": "3.10.1"}, "packaging": {"depends": [], "file_name": "packaging-23.2-py3-none-any.whl", "imports": ["packaging"], "install_dir": "site", "name": "packaging", "package_type": "package", "sha256": "34c09d7d17c4b584b10edca9255281c11c4713f77c76945d918d7ffa0455c9fa", "shared_library": false, "unvendored_tests": false, "version": "23.2"}, "pandas": {"depends": ["numpy", "python-dateutil", "pytz"], "file_name": "pandas-2.2.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pandas"], "install_dir": "site", "name": "pandas", "package_type": "package", "sha256": "57257d1fe41081ec6aa88499a6eab6e06b1cee1e54fbc05fc1365c739017e4d6", "shared_library": false, "unvendored_tests": true, "version": "2.2.0"}, "pandas-tests": {"depends": ["pandas"], "file_name": "pandas-tests.tar", "imports": [], "install_dir": "site", "name": "pandas-tests", "package_type": "package", "sha256": "eba78f89a53a4898e0ae87e7571fbfe7a540d65d53fda17935b115e1c767c444", "shared_library": false, "unvendored_tests": false, "version": "2.2.0"}, "parso": {"depends": [], "file_name": "parso-0.8.4-py2.py3-none-any.whl", "imports": ["parso"], "install_dir": "site", "name": "parso", "package_type": "package", "sha256": "36e589cee5c2aaf94489df8f30f4db7d89b42b260a6d739583fa00a3e42d157a", "shared_library": false, "unvendored_tests": false, "version": "0.8.4"}, "patsy": {"depends": ["numpy", "six"], "file_name": "patsy-0.5.6-py2.py3-none-any.whl", "imports": ["patsy"], "install_dir": "site", "name": "patsy", "package_type": "package", "sha256": "760833a100a66baafd1e4b0a726eea87e6c9edcd7c6ba3e7473ca1dfe593e7f8", "shared_library": false, "unvendored_tests": true, "version": "0.5.6"}, "patsy-tests": {"depends": ["patsy"], "file_name": "patsy-tests.tar", "imports": [], "install_dir": "site", "name": "patsy-tests", "package_type": "package", "sha256": "6a3632284ca095eb87cec8a79d06183399f85c21af4ff986cb7d9a37ebd3e13f", "shared_library": false, "unvendored_tests": false, "version": "0.5.6"}, "peewee": {"depends": ["sqlite3", "cffi"], "file_name": "peewee-3.17.3-py3-none-any.whl", "imports": ["peewee"], "install_dir": "site", "name": "peewee", "package_type": "package", "sha256": "b3aac565a0a5e345fa0c069c41a0b696c9c8292e9970405ce9fb7fded0a3cf34", "shared_library": false, "unvendored_tests": true, "version": "3.17.3"}, "peewee-tests": {"depends": ["peewee"], "file_name": "peewee-tests.tar", "imports": [], "install_dir": "site", "name": "peewee-tests", "package_type": "package", "sha256": "bcda11ebbf1e3b0326845039c48106fd56843a1ff1cf33375b075f9b615ae233", "shared_library": false, "unvendored_tests": false, "version": "3.17.3"}, "pillow": {"depends": [], "file_name": "pillow-10.2.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["PIL"], "install_dir": "site", "name": "Pillow", "package_type": "package", "sha256": "b1ef215cdd2abc38fab5d821a86d730bc495e0450d34ed99d90c74f319f90f55", "shared_library": false, "unvendored_tests": false, "version": "10.2.0"}, "pillow-heif": {"depends": ["cffi", "pillow", "libheif"], "file_name": "pillow_heif-0.8.0-cp36-abi3-pyodide_2024_0_wasm32.whl", "imports": ["pillow_heif"], "install_dir": "site", "name": "pillow_heif", "package_type": "package", "sha256": "a2adfb50f218b2609b2be0d48d7fa0e4f03f66b7c8b69a80a83fab2bd62c8472", "shared_library": false, "unvendored_tests": false, "version": "0.8.0"}, "pkgconfig": {"depends": [], "file_name": "pkgconfig-1.5.5-py3-none-any.whl", "imports": ["pkgconfig"], "install_dir": "site", "name": "pkgconfig", "package_type": "package", "sha256": "b1772cd7ef35b74e2fae52ee83f70bc1c51c46e962c3ce8d514be3927b57a37b", "shared_library": false, "unvendored_tests": false, "version": "1.5.5"}, "pluggy": {"depends": [], "file_name": "pluggy-1.5.0-py3-none-any.whl", "imports": ["pluggy"], "install_dir": "site", "name": "pluggy", "package_type": "package", "sha256": "41726a2e85006e36c5d1b584b01674aeaba798f7f27eabc68dc1350ebdebd7e1", "shared_library": false, "unvendored_tests": false, "version": "1.5.0"}, "pplpy": {"depends": ["gmpy2", "cysignals"], "file_name": "pplpy-0.8.10-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["ppl"], "install_dir": "site", "name": "pplpy", "package_type": "package", "sha256": "325d38df6ddd86ba3e0b8fc02e77fcb520033c3211589550b1c0f30638644f22", "shared_library": false, "unvendored_tests": false, "version": "0.8.10"}, "primecountpy": {"depends": ["cysignals"], "file_name": "primecountpy-0.1.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["primecountpy"], "install_dir": "site", "name": "primecountpy", "package_type": "package", "sha256": "dbbd9dd54cdde6f191cb615875f8a8edf6ec4f548def141d99b4ee5e9804d44e", "shared_library": false, "unvendored_tests": false, "version": "0.1.0"}, "prompt-toolkit": {"depends": [], "file_name": "prompt_toolkit-3.0.43-py3-none-any.whl", "imports": ["prompt_toolkit"], "install_dir": "site", "name": "prompt_toolkit", "package_type": "package", "sha256": "954ac31a47ce598daec1757c13f9d4ae5e3081f5762bcaaadbea62cef593ca3e", "shared_library": false, "unvendored_tests": false, "version": "3.0.43"}, "protobuf": {"depends": [], "file_name": "protobuf-4.24.4-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["google"], "install_dir": "site", "name": "protobuf", "package_type": "package", "sha256": "fedaad25244cd92d3ae1cce9dc2bfc30186efde7d979146aa6c2e5c322f3f441", "shared_library": false, "unvendored_tests": false, "version": "4.24.4"}, "pure-eval": {"depends": [], "file_name": "pure_eval-0.2.2-py3-none-any.whl", "imports": ["pure_eval"], "install_dir": "site", "name": "pure_eval", "package_type": "package", "sha256": "2a02f1b49cb9b405f7fa300695be174fc4f8b4da220dcace1daa66ab252ba027", "shared_library": false, "unvendored_tests": false, "version": "0.2.2"}, "py": {"depends": [], "file_name": "py-1.11.0-py2.py3-none-any.whl", "imports": ["py"], "install_dir": "site", "name": "py", "package_type": "package", "sha256": "8027d2e090352a65167983ec14b187b0c281dc31e98cb6e17885f57d3cf2b407", "shared_library": false, "unvendored_tests": false, "version": "1.11.0"}, "pyclipper": {"depends": [], "file_name": "pyclipper-1.3.0.post5-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pyclipper"], "install_dir": "site", "name": "pyclipper", "package_type": "package", "sha256": "c6f8d4b9749600cb8443076258ccf293465fbe0bd62c448316ef3613c9dd2c05", "shared_library": false, "unvendored_tests": false, "version": "1.3.0.post5"}, "pycparser": {"depends": [], "file_name": "pycparser-2.22-py3-none-any.whl", "imports": ["pycparser"], "install_dir": "site", "name": "pycparser", "package_type": "package", "sha256": "2a807b142ffd51086282d4776576ca61b0fd870ea6babc7212d75607357279be", "shared_library": false, "unvendored_tests": false, "version": "2.22"}, "pycryptodome": {"depends": [], "file_name": "pycryptodome-3.20.0-cp35-abi3-pyodide_2024_0_wasm32.whl", "imports": ["Crypto"], "install_dir": "site", "name": "pycryptodome", "package_type": "package", "sha256": "bea845208b260b9081f5ec1cd9833b111b1642af04ec5824e3c83fd0d2c30a4f", "shared_library": false, "unvendored_tests": true, "version": "3.20.0"}, "pycryptodome-tests": {"depends": ["pycryptodome"], "file_name": "pycryptodome-tests.tar", "imports": [], "install_dir": "site", "name": "pycryptodome-tests", "package_type": "package", "sha256": "8b37e84e9df0bae3d6459d5ac64669d88e73015d11918c6c57adeb052f5d0c59", "shared_library": false, "unvendored_tests": false, "version": "3.20.0"}, "pydantic": {"depends": ["typing-extensions", "pydantic_core", "annotated-types"], "file_name": "pydantic-2.7.0-py3-none-any.whl", "imports": ["pydantic"], "install_dir": "site", "name": "pydantic", "package_type": "package", "sha256": "7c866a4a9071ca25279c06c0e4871d6e5a7c611f2e1bcfadc47ba2b3336016ca", "shared_library": false, "unvendored_tests": false, "version": "2.7.0"}, "pydantic-core": {"depends": [], "file_name": "pydantic_core-2.18.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pydantic_core"], "install_dir": "site", "name": "pydantic_core", "package_type": "package", "sha256": "be7f83ad55493a9ffb94777d30fe3e6d3334cb08e2ebdaf0e7a799eef0174866", "shared_library": false, "unvendored_tests": false, "version": "2.18.1"}, "pydecimal": {"depends": [], "file_name": "pydecimal-1.0.0.zip", "imports": ["_pydecimal"], "install_dir": "stdlib", "name": "pydecimal", "package_type": "cpython_module", "sha256": "c0661bafc675196901c67b4f883abdb0dffb44b97aec91bec0a03bfebeb12668", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "pydoc-data": {"depends": [], "file_name": "pydoc_data-1.0.0.zip", "imports": ["pydoc_data"], "install_dir": "stdlib", "name": "pydoc_data", "package_type": "cpython_module", "sha256": "b15bf763b1158e7757c7265a1340c92ce23c753f983e4d487e2bea8cc749300f", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "pyerfa": {"depends": ["numpy"], "file_name": "pyerfa-2.0.1.4-cp39-abi3-pyodide_2024_0_wasm32.whl", "imports": ["erfa"], "install_dir": "site", "name": "pyerfa", "package_type": "package", "sha256": "423bd62931e5244edd860856e47eb6b5122f1ec369fdd797112b6676ab60922a", "shared_library": false, "unvendored_tests": true, "version": "2.0.1.4"}, "pyerfa-tests": {"depends": ["pyerfa"], "file_name": "pyerfa-tests.tar", "imports": [], "install_dir": "site", "name": "pyerfa-tests", "package_type": "package", "sha256": "8bf7d38d8aa679833a5af53c9729bcd28c69a028fefe7f751d06d2e92f93981f", "shared_library": false, "unvendored_tests": false, "version": "2.0.1.4"}, "pygame-ce": {"depends": [], "file_name": "pygame_ce-2.4.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pygame"], "install_dir": "site", "name": "pygame-ce", "package_type": "package", "sha256": "ffeae5c40f989d0c208711b552fa2e2b41b2df6077a4d3941f208fc97d4bf9a1", "shared_library": false, "unvendored_tests": true, "version": "2.4.1"}, "pygame-ce-tests": {"depends": ["pygame-ce"], "file_name": "pygame-ce-tests.tar", "imports": [], "install_dir": "site", "name": "pygame-ce-tests", "package_type": "package", "sha256": "ece1ba607e541cea41d29ad516327e58853cb1908f9fbf338058ee40bdc683c0", "shared_library": false, "unvendored_tests": false, "version": "2.4.1"}, "pygments": {"depends": [], "file_name": "pygments-2.17.2-py3-none-any.whl", "imports": ["pygments"], "install_dir": "site", "name": "Pygments", "package_type": "package", "sha256": "58dfa90582044080f780d8f1b71e9e52c320fb7b0231c7191d32d456650f6cee", "shared_library": false, "unvendored_tests": false, "version": "2.17.2"}, "pyheif": {"depends": ["cffi"], "file_name": "pyheif-0.7.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pyheif"], "install_dir": "site", "name": "pyheif", "package_type": "package", "sha256": "7b1837edd9ae8bb8e1f1d16a65c3f260ca42751db17dd6652a02c92c12201936", "shared_library": false, "unvendored_tests": false, "version": "0.7.1"}, "pyiceberg": {"depends": ["click", "fsspec", "mmh3", "pydantic", "pyparsing", "requests", "rich", "sortedcontainers", "sqlalchemy", "strictyaml"], "file_name": "pyiceberg-0.6.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pyiceberg"], "install_dir": "site", "name": "pyiceberg", "package_type": "package", "sha256": "aa291e29362604cc8acf7ae035b7f044ab5660014087a7464f75b9fbf36a566d", "shared_library": false, "unvendored_tests": false, "version": "0.6.0"}, "pyinstrument": {"depends": [], "file_name": "pyinstrument-4.4.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pyinstrument"], "install_dir": "site", "name": "pyinstrument", "package_type": "package", "sha256": "1ac73667303af9889b8787b46413084b55cb3b2420825cc68bc6afd529fe1996", "shared_library": false, "unvendored_tests": false, "version": "4.4.0"}, "pynacl": {"depends": ["cffi"], "file_name": "PyNaCl-1.5.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["nacl"], "install_dir": "site", "name": "pynacl", "package_type": "package", "sha256": "c3ab7e374410b93609bc53212a8faf8cd617f45bdfd9cb6cdf8ecce60e3ba9e9", "shared_library": false, "unvendored_tests": false, "version": "1.5.0"}, "pyodide-http": {"depends": [], "file_name": "pyodide_http-0.2.1-py3-none-any.whl", "imports": ["pyodide_http"], "install_dir": "site", "name": "pyodide-http", "package_type": "package", "sha256": "aa2cc7e585e98a84208bc042dd36140cb4213ec6112915a1cc86f7101e38d47a", "shared_library": false, "unvendored_tests": false, "version": "0.2.1"}, "pyparsing": {"depends": [], "file_name": "pyparsing-3.1.2-py3-none-any.whl", "imports": ["pyparsing"], "install_dir": "site", "name": "pyparsing", "package_type": "package", "sha256": "8db11035317ae75a36c2b4dea44eeba5630c8bd2f501e74a243dbbe93f511895", "shared_library": false, "unvendored_tests": false, "version": "3.1.2"}, "pyproj": {"depends": ["certifi", "sqlite3"], "file_name": "pyproj-3.6.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pyproj"], "install_dir": "site", "name": "pyproj", "package_type": "package", "sha256": "109d9c5c99442a89c40453571c1337589bcfdeb66d683645973ee8bc5d14ff85", "shared_library": false, "unvendored_tests": false, "version": "3.6.1"}, "pyrsistent": {"depends": [], "file_name": "pyrsistent-0.20.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["_pyrsistent_version", "pyrsistent"], "install_dir": "site", "name": "pyrsistent", "package_type": "package", "sha256": "5d464ec51462568599539a111c431c7612e4acefa8d86a4d18280cfa3bc4d3ec", "shared_library": false, "unvendored_tests": false, "version": "0.20.0"}, "pysam": {"depends": [], "file_name": "pysam-0.22.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pysam"], "install_dir": "site", "name": "pysam", "package_type": "package", "sha256": "c6374ae788806ea721c6588dd8e297c214262e95e42839ef4ade44b649f8a278", "shared_library": false, "unvendored_tests": false, "version": "0.22.0"}, "pyshp": {"depends": [], "file_name": "pyshp-2.3.1-py2.py3-none-any.whl", "imports": ["shapefile"], "install_dir": "site", "name": "pyshp", "package_type": "package", "sha256": "592a39ee27138b454d767f6620c6895f29ae360c4a47ab3fd00ad6875e432566", "shared_library": false, "unvendored_tests": false, "version": "2.3.1"}, "pytest": {"depends": ["atomicwrites", "attrs", "more-itertools", "pluggy", "py", "setuptools", "six", "iniconfig", "exceptiongroup"], "file_name": "pytest-8.1.1-py3-none-any.whl", "imports": ["_pytest", "pytest"], "install_dir": "site", "name": "pytest", "package_type": "package", "sha256": "132f51fe851ed5735e6f6b7729c566e44cb6ac488b7d0040ca247d1cb9638d1a", "shared_library": false, "unvendored_tests": false, "version": "8.1.1"}, "pytest-asyncio": {"depends": ["pytest"], "file_name": "pytest_asyncio-0.23.7-py3-none-any.whl", "imports": ["pytest_asyncio"], "install_dir": "site", "name": "pytest-asyncio", "package_type": "package", "sha256": "80597e5a925462a351645d48af5806fd5ccf95f269c0690eae4df772aa66d424", "shared_library": false, "unvendored_tests": false, "version": "0.23.7"}, "pytest-benchmark": {"depends": [], "file_name": "pytest_benchmark-4.0.0-py3-none-any.whl", "imports": ["pytest_benchmark"], "install_dir": "site", "name": "pytest-benchmark", "package_type": "package", "sha256": "4752b0087dc78a3909a472998646266e834f2af2111ba7cf4a6c9659e737a957", "shared_library": false, "unvendored_tests": false, "version": "4.0.0"}, "python-dateutil": {"depends": ["six"], "file_name": "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", "imports": ["dateutil"], "install_dir": "site", "name": "python-dateutil", "package_type": "package", "sha256": "1adf6847a0ae4a09bef1fc9954089766800ce6d9688a5329d04ad54bcf7d1f2c", "shared_library": false, "unvendored_tests": false, "version": "2.9.0.post0"}, "python-flint": {"depends": [], "file_name": "python_flint-0.6.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["flint"], "install_dir": "site", "name": "python-flint", "package_type": "package", "sha256": "95eac4de7c679cd78071e8d17f4e6ed2f373082f3bddba775d5a017dd9bfdc69", "shared_library": false, "unvendored_tests": false, "version": "0.6.0"}, "python-magic": {"depends": ["libmagic"], "file_name": "python_magic-0.4.27-py2.py3-none-any.whl", "imports": ["magic"], "install_dir": "site", "name": "python-magic", "package_type": "package", "sha256": "7353b45205f8d79530c37367321ae511e84dec5f8a39c441082f3b2f0fff70d3", "shared_library": false, "unvendored_tests": false, "version": "0.4.27"}, "python-sat": {"depends": ["six"], "file_name": "python_sat-1.8.dev13-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pysat"], "install_dir": "site", "name": "python-sat", "package_type": "package", "sha256": "210f18f6d80f9670a9d5d53973b73facfbf2fcc71a87d6583db816862be0ba23", "shared_library": false, "unvendored_tests": false, "version": "1.8.dev13"}, "python-solvespace": {"depends": [], "file_name": "python_solvespace-3.0.8-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["python_solvespace"], "install_dir": "site", "name": "python_solvespace", "package_type": "package", "sha256": "b88c85292a771f365664a9c4d044d87db62c201ee8f7a97bd4fca94ddbee242c", "shared_library": false, "unvendored_tests": false, "version": "3.0.8"}, "pytz": {"depends": [], "file_name": "pytz-2024.1-py2.py3-none-any.whl", "imports": ["pytz"], "install_dir": "site", "name": "pytz", "package_type": "package", "sha256": "62dfa923a4643d5d56371fe08a8aa2ea63854d154cf46c09e7c91c167207eb1a", "shared_library": false, "unvendored_tests": false, "version": "2024.1"}, "pywavelets": {"depends": ["numpy", "matplotlib", "scipy"], "file_name": "pywavelets-1.6.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pywt"], "install_dir": "site", "name": "pywavelets", "package_type": "package", "sha256": "32626f1fd288714f500b961b7358f5dc7b2fabfbd90b458514055dd95f7965d3", "shared_library": false, "unvendored_tests": true, "version": "1.6.0"}, "pywavelets-tests": {"depends": ["pywavelets"], "file_name": "pywavelets-tests.tar", "imports": [], "install_dir": "site", "name": "pywavelets-tests", "package_type": "package", "sha256": "6a6b63b515e6285b7b90bc94dd138a94f1771fa1dfb550816c61c6b1b7bcb4bf", "shared_library": false, "unvendored_tests": false, "version": "1.6.0"}, "pyxel": {"depends": [], "file_name": "pyxel-1.9.10-cp37-abi3-pyodide_2024_0_wasm32.whl", "imports": ["pyxel"], "install_dir": "site", "name": "pyxel", "package_type": "package", "sha256": "46e15678938bb23be6a5e89ee2566bbe6457fa7ede38a0c26e3ea86bdb642b09", "shared_library": false, "unvendored_tests": false, "version": "1.9.10"}, "pyxirr": {"depends": [], "file_name": "pyxirr-0.10.3-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["pyxirr"], "install_dir": "site", "name": "pyxirr", "package_type": "package", "sha256": "ccb91ae101e3ee001aec040e1423c86b25832deddbaf3efbb6ca4557064a7ced", "shared_library": false, "unvendored_tests": false, "version": "0.10.3"}, "pyyaml": {"depends": [], "file_name": "PyYAML-6.0.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["_yaml", "yaml"], "install_dir": "site", "name": "pyyaml", "package_type": "package", "sha256": "f8e7882442554c1648a62c1f47e4ef3c1c4756834c9d42cd3ea89b01e92738c6", "shared_library": false, "unvendored_tests": false, "version": "6.0.1"}, "rebound": {"depends": ["numpy"], "file_name": "rebound-3.24.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["rebound"], "install_dir": "site", "name": "rebound", "package_type": "package", "sha256": "e85c1670d5a67564fa313e55c176a946db7646fb6ad4faa4bc8c32464e7f30de", "shared_library": false, "unvendored_tests": false, "version": "3.24.2"}, "reboundx": {"depends": ["rebound", "numpy"], "file_name": "reboundx-3.10.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["reboundx"], "install_dir": "site", "name": "reboundx", "package_type": "package", "sha256": "2acea849f2e63eaf09ec8ea3e0cc676f3c7930ecdaf372660a72aed514acdb40", "shared_library": false, "unvendored_tests": false, "version": "3.10.1"}, "referencing": {"depends": ["attrs", "rpds-py"], "file_name": "referencing-0.34.0-py3-none-any.whl", "imports": ["referencing"], "install_dir": "site", "name": "referencing", "package_type": "package", "sha256": "6912d699247bc5c38391859c922308465a6a6beb27b4d6a48ade6cf7f66db561", "shared_library": false, "unvendored_tests": true, "version": "0.34.0"}, "referencing-tests": {"depends": ["referencing"], "file_name": "referencing-tests.tar", "imports": [], "install_dir": "site", "name": "referencing-tests", "package_type": "package", "sha256": "5f7bceb247a09327cf0912eca4d6a3c90cb6b4436a864bc82a333ecf3e11159f", "shared_library": false, "unvendored_tests": false, "version": "0.34.0"}, "regex": {"depends": [], "file_name": "regex-2024.4.16-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["regex"], "install_dir": "site", "name": "regex", "package_type": "package", "sha256": "826a6da49b07843236888dd29c8ce0cab1f588315ccf4c55321ecd135fd21093", "shared_library": false, "unvendored_tests": true, "version": "2024.4.16"}, "regex-tests": {"depends": ["regex"], "file_name": "regex-tests.tar", "imports": [], "install_dir": "site", "name": "regex-tests", "package_type": "package", "sha256": "37d33d6e7fb2d1c605bd72d78236ef4e324665c474aea4db737a6e6444159942", "shared_library": false, "unvendored_tests": false, "version": "2024.4.16"}, "requests": {"depends": ["charset-normalizer", "idna", "urllib3", "certifi"], "file_name": "requests-2.31.0-py3-none-any.whl", "imports": ["requests"], "install_dir": "site", "name": "requests", "package_type": "package", "sha256": "001c81f2678aa7dbd3f6884e53997b26c948d0b52603933d953d6f835c397965", "shared_library": false, "unvendored_tests": false, "version": "2.31.0"}, "retrying": {"depends": ["six"], "file_name": "retrying-1.3.4-py3-none-any.whl", "imports": ["retrying"], "install_dir": "site", "name": "retrying", "package_type": "package", "sha256": "c3dba397227a4f7eb4eb95fe627f4d2d03a4c50adf6f25edc1dbc691ee5622c9", "shared_library": false, "unvendored_tests": false, "version": "1.3.4"}, "rich": {"depends": [], "file_name": "rich-13.7.1-py3-none-any.whl", "imports": ["rich"], "install_dir": "site", "name": "rich", "package_type": "package", "sha256": "ea0e850b047833799b03e521dd8eb7d21118056183cf6957c336bf414c265282", "shared_library": false, "unvendored_tests": false, "version": "13.7.1"}, "river": {"depends": ["numpy", "pandas", "pytest", "scipy"], "file_name": "river-0.19.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["river"], "install_dir": "site", "name": "river", "package_type": "package", "sha256": "aaac213ea3f3176ee84654399e6b397f69f0bf2d1632d72c66a3232499dca938", "shared_library": false, "unvendored_tests": true, "version": "0.19.0"}, "river-tests": {"depends": ["river"], "file_name": "river-tests.tar", "imports": [], "install_dir": "site", "name": "river-tests", "package_type": "package", "sha256": "9b2bee4cfa8e9c91c3587ec24657def30e8a569b329b52d1acb64f078f309e22", "shared_library": false, "unvendored_tests": false, "version": "0.19.0"}, "robotraconteur": {"depends": ["numpy"], "file_name": "RobotRaconteur-1.2.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["RobotRaconteur"], "install_dir": "site", "name": "RobotRaconteur", "package_type": "package", "sha256": "77753ca8a261756c7821f7b2cf7be4db90e2a2281d7d89e2c952f68e69eb3711", "shared_library": false, "unvendored_tests": false, "version": "1.2.0"}, "rpds-py": {"depends": [], "file_name": "rpds_py-0.18.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["rpds"], "install_dir": "site", "name": "rpds-py", "package_type": "package", "sha256": "abbcc63b95769dd804106e191eaf0ac462bd81acc45faeb6e83a8d72f8353b2d", "shared_library": false, "unvendored_tests": false, "version": "0.18.0"}, "ruamel-yaml": {"depends": [], "file_name": "ruamel.yaml-0.18.6-py3-none-any.whl", "imports": ["ruamel"], "install_dir": "site", "name": "ruamel.yaml", "package_type": "package", "sha256": "2ebfdf7175e37b832f191a7e11452e32c900618382b6bba4e9b16265d5e56f57", "shared_library": false, "unvendored_tests": false, "version": "0.18.6"}, "rust-panic-test": {"depends": [], "file_name": "rust_panic_test-1.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["rust-panic-test"], "install_dir": "site", "name": "rust-panic-test", "package_type": "package", "sha256": "c97425311fffebd46631b3e0666d4a4a6d4a84b5143e54c58d663b2fe6c122e9", "shared_library": false, "unvendored_tests": false, "version": "1.0"}, "scikit-image": {"depends": ["packaging", "numpy", "scipy", "networkx", "pillow", "imageio", "pywavelets", "lazy_loader"], "file_name": "scikit_image-0.23.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["skimage"], "install_dir": "site", "name": "scikit-image", "package_type": "package", "sha256": "ac530cc5e2cb757079e691415e096fe14b476267ccb0d14be9cd65c714cea96e", "shared_library": false, "unvendored_tests": true, "version": "0.23.2"}, "scikit-image-tests": {"depends": ["scikit-image"], "file_name": "scikit-image-tests.tar", "imports": [], "install_dir": "site", "name": "scikit-image-tests", "package_type": "package", "sha256": "292dda6f83cc184f2332fd05659a55214e9c269ada38472da9338d9e51ee500a", "shared_library": false, "unvendored_tests": false, "version": "0.23.2"}, "scikit-learn": {"depends": ["scipy", "joblib", "threadpoolctl"], "file_name": "scikit_learn-1.4.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["sklearn"], "install_dir": "site", "name": "scikit-learn", "package_type": "package", "sha256": "53302f72d375c6c110e1f50c9d70376884b22ba87eab53e440bd68f2a96016cd", "shared_library": false, "unvendored_tests": true, "version": "1.4.2"}, "scikit-learn-tests": {"depends": ["scikit-learn"], "file_name": "scikit-learn-tests.tar", "imports": [], "install_dir": "site", "name": "scikit-learn-tests", "package_type": "package", "sha256": "e57544bda608c3c48f613197bf1853d6d58d24e56ac70020f7c3c10e905e1b76", "shared_library": false, "unvendored_tests": false, "version": "1.4.2"}, "scipy": {"depends": ["numpy", "openblas"], "file_name": "scipy-1.12.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["scipy"], "install_dir": "site", "name": "scipy", "package_type": "package", "sha256": "3eb24e2939b223bc946db8cd193b33ad2ebbd6c98004cf17f26e2bd4e5bad92c", "shared_library": false, "unvendored_tests": true, "version": "1.12.0"}, "scipy-tests": {"depends": ["scipy"], "file_name": "scipy-tests.tar", "imports": [], "install_dir": "site", "name": "scipy-tests", "package_type": "package", "sha256": "999bf6b9449c64b74a08f4b40840c1f0a9e690cd8714a75554d552fd4cded727", "shared_library": false, "unvendored_tests": false, "version": "1.12.0"}, "screed": {"depends": [], "file_name": "screed-1.1.3-py2.py3-none-any.whl", "imports": ["bigtests", "screed"], "install_dir": "site", "name": "screed", "package_type": "package", "sha256": "1f7bd864f01e97056e0c06a11d0c302726f4d9bcd2cf378961dad6336cedfebf", "shared_library": false, "unvendored_tests": true, "version": "1.1.3"}, "screed-tests": {"depends": ["screed"], "file_name": "screed-tests.tar", "imports": [], "install_dir": "site", "name": "screed-tests", "package_type": "package", "sha256": "8d3ce3a84b6efcd306853e35bffb027b1b21b0cdf8f60be25c7c906193df07bf", "shared_library": false, "unvendored_tests": false, "version": "1.1.3"}, "setuptools": {"depends": ["pyparsing"], "file_name": "setuptools-69.5.1-py3-none-any.whl", "imports": ["_distutils_hack", "pkg_resources", "setuptools"], "install_dir": "site", "name": "setuptools", "package_type": "package", "sha256": "8d109163f2597f5353f0e9089636de4031a310245443e8a1f2af6afe18b8c41c", "shared_library": false, "unvendored_tests": false, "version": "69.5.1"}, "shapely": {"depends": ["numpy"], "file_name": "shapely-2.0.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["shapely"], "install_dir": "site", "name": "shapely", "package_type": "package", "sha256": "2ca8a9a020893e3ce747c006908bd3ff8ca14f5ecf7201bc240d7e2bcdae53a5", "shared_library": false, "unvendored_tests": true, "version": "2.0.2"}, "shapely-tests": {"depends": ["shapely"], "file_name": "shapely-tests.tar", "imports": [], "install_dir": "site", "name": "shapely-tests", "package_type": "package", "sha256": "cd2eca2e5c2aa75fe98a012eebbc52beda9dc13bc9ddfe455955f79d28d1972f", "shared_library": false, "unvendored_tests": false, "version": "2.0.2"}, "sharedlib-test": {"depends": [], "file_name": "sharedlib-test-1.0.zip", "imports": [], "install_dir": "dynlib", "name": "sharedlib-test", "package_type": "shared_library", "sha256": "7478123361942519d05cc921696d597a2ba75806d52ddb5973c0f19b21ee22fd", "shared_library": true, "unvendored_tests": false, "version": "1.0"}, "sharedlib-test-py": {"depends": ["sharedlib-test"], "file_name": "sharedlib_test_py-1.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["sharedlib_test"], "install_dir": "site", "name": "sharedlib-test-py", "package_type": "package", "sha256": "f1e7add98c4d1aebced3e6ccbfe973ff83ec5e8642a00f16975351d0518411cf", "shared_library": false, "unvendored_tests": false, "version": "1.0"}, "simplejson": {"depends": [], "file_name": "simplejson-3.19.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["simplejson"], "install_dir": "site", "name": "simplejson", "package_type": "package", "sha256": "c4f8f531952ab9d402d01ce89106edfbcc243173f968f2e60efdb3618930b3df", "shared_library": false, "unvendored_tests": true, "version": "3.19.2"}, "simplejson-tests": {"depends": ["simplejson"], "file_name": "simplejson-tests.tar", "imports": [], "install_dir": "site", "name": "simplejson-tests", "package_type": "package", "sha256": "4c8ff471020ca4a7d115672f1d2aca34dd7bd7db53b38d45e6b24c3d71f7c2b5", "shared_library": false, "unvendored_tests": false, "version": "3.19.2"}, "sisl": {"depends": ["pyparsing", "numpy", "scipy", "tqdm", "xarray", "pandas", "matplotlib"], "file_name": "sisl-0.14.3-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["sisl_toolbox", "sisl"], "install_dir": "site", "name": "sisl", "package_type": "package", "sha256": "a026d869059702221c0b093650bbd62b96d1c7d87bc42188b5a4a328a2bdb39d", "shared_library": false, "unvendored_tests": true, "version": "0.14.3"}, "sisl-tests": {"depends": ["sisl"], "file_name": "sisl-tests.tar", "imports": [], "install_dir": "site", "name": "sisl-tests", "package_type": "package", "sha256": "35a35535a2ae2ea220c97042753c7c10e3a76932cbb773bb3a8166a833e03d0b", "shared_library": false, "unvendored_tests": false, "version": "0.14.3"}, "six": {"depends": [], "file_name": "six-1.16.0-py2.py3-none-any.whl", "imports": ["six"], "install_dir": "site", "name": "six", "package_type": "package", "sha256": "176a02f2e3c155246b96ff0a8e8a35c35e74f666923a50e47d719f21e2d3b7f2", "shared_library": false, "unvendored_tests": false, "version": "1.16.0"}, "smart-open": {"depends": [], "file_name": "smart_open-7.0.4-py3-none-any.whl", "imports": ["smart_open"], "install_dir": "site", "name": "smart_open", "package_type": "package", "sha256": "8217625b7117f7fe3bd295a6a41c5a5253b2471a0668e3d28453fd5375920690", "shared_library": false, "unvendored_tests": false, "version": "7.0.4"}, "sortedcontainers": {"depends": [], "file_name": "sortedcontainers-2.4.0-py2.py3-none-any.whl", "imports": ["sortedcontainers"], "install_dir": "site", "name": "sortedcontainers", "package_type": "package", "sha256": "56194229f40e8f5d813b68ce87595483b408ead2c4552439265069545b20d753", "shared_library": false, "unvendored_tests": false, "version": "2.4.0"}, "soupsieve": {"depends": [], "file_name": "soupsieve-2.5-py3-none-any.whl", "imports": ["soupsieve"], "install_dir": "site", "name": "soupsieve", "package_type": "package", "sha256": "cc4fbcb87488b840a835be9f568435dba297c6914f1edfa32b3bbf74a8a348cf", "shared_library": false, "unvendored_tests": false, "version": "2.5"}, "sourmash": {"depends": ["screed", "cffi", "deprecation", "cachetools", "numpy", "matplotlib", "scipy", "sqlite3", "bitstring"], "file_name": "sourmash-4.8.8-py3-none-pyodide_2024_0_wasm32.whl", "imports": ["sourmash"], "install_dir": "site", "name": "sourmash", "package_type": "package", "sha256": "2f1a1b6906816867b95e61dea826e7a5cd9344380324a2a90bae8bb33753927d", "shared_library": false, "unvendored_tests": false, "version": "4.8.8"}, "sparseqr": {"depends": ["pycparser", "cffi", "numpy", "scipy", "suitesparse"], "file_name": "sparseqr-1.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["sparseqr"], "install_dir": "site", "name": "sparseqr", "package_type": "package", "sha256": "88acb940cfadf513b4d72c1ccb0adaf7001f0d7da9ca101d450e0321cef08116", "shared_library": false, "unvendored_tests": false, "version": "1.2"}, "sqlalchemy": {"depends": ["sqlite3", "typing-extensions"], "file_name": "SQLAlchemy-2.0.29-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["sqlalchemy"], "install_dir": "site", "name": "sqlalchemy", "package_type": "package", "sha256": "e3e485820b9782d2ce98bf4fdbaa6dee12314d3fd66751fd9ec6edb13065e75b", "shared_library": false, "unvendored_tests": true, "version": "2.0.29"}, "sqlalchemy-tests": {"depends": ["sqlalchemy"], "file_name": "sqlalchemy-tests.tar", "imports": [], "install_dir": "site", "name": "sqlalchemy-tests", "package_type": "package", "sha256": "a4335234473c85da12709a05d651940564acd344f62bf91cbf13cdac888f9604", "shared_library": false, "unvendored_tests": false, "version": "2.0.29"}, "sqlite3": {"depends": [], "file_name": "sqlite3-1.0.0.zip", "imports": ["sqlite3", "_sqlite3"], "install_dir": "stdlib", "name": "sqlite3", "package_type": "cpython_module", "sha256": "29586a9ec94786c6385d3ef46aa65f484bb3f9f61b1bdbd18a0aa396e551cd9c", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "ssl": {"depends": ["openssl"], "file_name": "ssl-1.0.0.zip", "imports": ["ssl", "_ssl"], "install_dir": "stdlib", "name": "ssl", "package_type": "cpython_module", "sha256": "c57eed8de854b8d1ba4911c98390e5a6810d2b88ce84e030598d9a23c98346bf", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "stack-data": {"depends": [], "file_name": "stack_data-0.6.3-py3-none-any.whl", "imports": ["stack_data"], "install_dir": "site", "name": "stack_data", "package_type": "package", "sha256": "2f71f5dd0878678c74d89dfafe6b6d343b4ad5a1036f444df8b0208b8dd2576a", "shared_library": false, "unvendored_tests": false, "version": "0.6.3"}, "statsmodels": {"depends": ["numpy", "scipy", "pandas", "patsy", "packaging"], "file_name": "statsmodels-0.14.2-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["statsmodels"], "install_dir": "site", "name": "statsmodels", "package_type": "package", "sha256": "663c63c8ec52595437705125b2312c334ade7d805278c4484a64db14d6c0e5cf", "shared_library": false, "unvendored_tests": true, "version": "0.14.2"}, "statsmodels-tests": {"depends": ["statsmodels"], "file_name": "statsmodels-tests.tar", "imports": [], "install_dir": "site", "name": "statsmodels-tests", "package_type": "package", "sha256": "6c90ea3d8b162c1557a557145bc8fcdf3437da3d5be74d710b0824b6f5ad49ec", "shared_library": false, "unvendored_tests": false, "version": "0.14.2"}, "strictyaml": {"depends": ["python-dateutil"], "file_name": "strictyaml-1.7.3-py3-none-any.whl", "imports": ["strictyaml"], "install_dir": "site", "name": "strictyaml", "package_type": "package", "sha256": "7e0306417f802210ada75ea0eb506d7a60b150d366f3144b7e8bc18f5ff75d29", "shared_library": false, "unvendored_tests": false, "version": "1.7.3"}, "suitesparse": {"depends": ["openblas"], "file_name": "suitesparse-5.11.0.zip", "imports": [], "install_dir": "dynlib", "name": "suitesparse", "package_type": "shared_library", "sha256": "c14ddfb6b7c3f5fdc86177b9f96cdceacdad3d970bc53a1b22be5c1dd244db8d", "shared_library": true, "unvendored_tests": false, "version": "5.11.0"}, "svgwrite": {"depends": [], "file_name": "svgwrite-1.4.3-py3-none-any.whl", "imports": ["svgwrite"], "install_dir": "site", "name": "svgwrite", "package_type": "package", "sha256": "2f708f13e85580beff1adb8e1b178ab83c3f41161aec6afbdcc418fc6297daa7", "shared_library": false, "unvendored_tests": false, "version": "1.4.3"}, "swiglpk": {"depends": [], "file_name": "swiglpk-5.0.10-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["swiglpk"], "install_dir": "site", "name": "swiglpk", "package_type": "package", "sha256": "47c0fb4a7692d01155b2b15af095ad3505a2ba2c5a5d31bf46197293533515d9", "shared_library": false, "unvendored_tests": false, "version": "5.0.10"}, "sympy": {"depends": ["mpmath"], "file_name": "sympy-1.12-py3-none-any.whl", "imports": ["isympy", "sympy"], "install_dir": "site", "name": "sympy", "package_type": "package", "sha256": "7a4792ab8d537fa71e1a0ee316e106132212e7ef1473fb6a31b325ad868f1802", "shared_library": false, "unvendored_tests": true, "version": "1.12"}, "sympy-tests": {"depends": ["sympy"], "file_name": "sympy-tests.tar", "imports": [], "install_dir": "site", "name": "sympy-tests", "package_type": "package", "sha256": "5a1619b61ee0615c73cafbf492c5a9875b4af5411264c3eca2201d346e86a093", "shared_library": false, "unvendored_tests": false, "version": "1.12"}, "tblib": {"depends": [], "file_name": "tblib-3.0.0-py3-none-any.whl", "imports": ["tblib"], "install_dir": "site", "name": "tblib", "package_type": "package", "sha256": "ad99c66810817b58e92c3be9ceb9ebc3762f51d7ecb6c06a2c8753a170c4e662", "shared_library": false, "unvendored_tests": false, "version": "3.0.0"}, "termcolor": {"depends": [], "file_name": "termcolor-2.4.0-py3-none-any.whl", "imports": ["termcolor"], "install_dir": "site", "name": "termcolor", "package_type": "package", "sha256": "f7eea924f89bf4f79713eb1253d6f3560247cee070e0c5531256e93d7d21e666", "shared_library": false, "unvendored_tests": false, "version": "2.4.0"}, "test": {"depends": [], "file_name": "test-1.0.0.zip", "imports": ["test"], "install_dir": "stdlib", "name": "test", "package_type": "cpython_module", "sha256": "0e1c1c9a3fab52f55d1ee52242962d3e83c4b25aa33aa4c0a9d3e628cedcb67c", "shared_library": true, "unvendored_tests": false, "version": "1.0.0"}, "texttable": {"depends": [], "file_name": "texttable-1.7.0-py2.py3-none-any.whl", "imports": ["texttable"], "install_dir": "site", "name": "texttable", "package_type": "package", "sha256": "c2c44fd89aff617e8211c9e531ee654de3af7dba3cc8edb8415129555e349199", "shared_library": false, "unvendored_tests": false, "version": "1.7.0"}, "threadpoolctl": {"depends": [], "file_name": "threadpoolctl-3.4.0-py3-none-any.whl", "imports": ["threadpoolctl"], "install_dir": "site", "name": "threadpoolctl", "package_type": "package", "sha256": "42744246ef195dcf1a4e1387ef93b52fdbbb1e838c970d8303a970c9cea886c5", "shared_library": false, "unvendored_tests": false, "version": "3.4.0"}, "tomli": {"depends": [], "file_name": "tomli-2.0.1-py3-none-any.whl", "imports": ["tomli"], "install_dir": "site", "name": "tomli", "package_type": "package", "sha256": "96c7e72ef2b9a75c5a5fe81e1e79f8c0dcb2f95cefe5c2b4406083e41bb922be", "shared_library": false, "unvendored_tests": false, "version": "2.0.1"}, "tomli-w": {"depends": [], "file_name": "tomli_w-1.0.0-py3-none-any.whl", "imports": ["tomli_w"], "install_dir": "site", "name": "tomli-w", "package_type": "package", "sha256": "bc217efbfd5909c997ee2ffcbbedce498b235f89d3f8bd97dc91bce38f8222f6", "shared_library": false, "unvendored_tests": false, "version": "1.0.0"}, "toolz": {"depends": [], "file_name": "toolz-0.12.1-py3-none-any.whl", "imports": ["tlz", "toolz"], "install_dir": "site", "name": "toolz", "package_type": "package", "sha256": "7fdec44c6bf2ec5e200f88d34616ffa37a612d59e79a3c7650e1651f43830ad1", "shared_library": false, "unvendored_tests": true, "version": "0.12.1"}, "toolz-tests": {"depends": ["toolz"], "file_name": "toolz-tests.tar", "imports": [], "install_dir": "site", "name": "toolz-tests", "package_type": "package", "sha256": "f8284c76aa221ae218fc32b9c8e79f2002d762d4b29fc418bf661ed1aaaebbbf", "shared_library": false, "unvendored_tests": false, "version": "0.12.1"}, "tqdm": {"depends": [], "file_name": "tqdm-4.66.2-py3-none-any.whl", "imports": ["tqdm"], "install_dir": "site", "name": "tqdm", "package_type": "package", "sha256": "a320470e3ebe4427ba9d5ebc55ba32e115602768a3c3839ffc3b6734cdc5c332", "shared_library": false, "unvendored_tests": false, "version": "4.66.2"}, "traitlets": {"depends": [], "file_name": "traitlets-5.14.3-py3-none-any.whl", "imports": ["traitlets"], "install_dir": "site", "name": "traitlets", "package_type": "package", "sha256": "eb436d3e1a6fc61c765112cb14ef88a97e17af1c1776530d152031d03d616625", "shared_library": false, "unvendored_tests": true, "version": "5.14.3"}, "traitlets-tests": {"depends": ["traitlets"], "file_name": "traitlets-tests.tar", "imports": [], "install_dir": "site", "name": "traitlets-tests", "package_type": "package", "sha256": "ede0f6fe9beada3195925d17172d7bd6007bb32704528658d858b696b204bb66", "shared_library": false, "unvendored_tests": false, "version": "5.14.3"}, "traits": {"depends": [], "file_name": "traits-6.4.3-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["traits"], "install_dir": "site", "name": "traits", "package_type": "package", "sha256": "2c44ca2179d175a1321158821ea4c1950a661ea4d68df0c7c00994ac2b8bb1f5", "shared_library": false, "unvendored_tests": true, "version": "6.4.3"}, "traits-tests": {"depends": ["traits"], "file_name": "traits-tests.tar", "imports": [], "install_dir": "site", "name": "traits-tests", "package_type": "package", "sha256": "281021428f44bc41d9b312740eb2c5081434d14be76ab56dc872011156b0ad01", "shared_library": false, "unvendored_tests": false, "version": "6.4.3"}, "tskit": {"depends": ["numpy", "svgwrite", "jsonschema", "rpds-py"], "file_name": "tskit-0.5.6-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["tskit"], "install_dir": "site", "name": "tskit", "package_type": "package", "sha256": "357a4e1bd6e3221f492300564910dea0745c796d4bba3327244e3bd766a900d7", "shared_library": false, "unvendored_tests": false, "version": "0.5.6"}, "typing-extensions": {"depends": [], "file_name": "typing_extensions-4.11.0-py3-none-any.whl", "imports": ["typing_extensions"], "install_dir": "site", "name": "typing-extensions", "package_type": "package", "sha256": "27413666e546c12f1fd74234fcd3ff44b3b11dd82b4becb2dfd697d199a01373", "shared_library": false, "unvendored_tests": false, "version": "4.11.0"}, "tzdata": {"depends": [], "file_name": "tzdata-2024.1-py2.py3-none-any.whl", "imports": ["tzdata"], "install_dir": "site", "name": "tzdata", "package_type": "package", "sha256": "7bcb4600ba97f6aae14e4bdd9d3f03f16e0b8136f9532a9af3f4c0e9d0403bea", "shared_library": false, "unvendored_tests": false, "version": "2024.1"}, "uncertainties": {"depends": ["future"], "file_name": "uncertainties-3.1.7-py2.py3-none-any.whl", "imports": ["uncertainties"], "install_dir": "site", "name": "uncertainties", "package_type": "package", "sha256": "7d976cd8383c7a5494588ef8c753aa3bc0cf58b85c13d35ef32a28258bc51dca", "shared_library": false, "unvendored_tests": true, "version": "3.1.7"}, "uncertainties-tests": {"depends": ["uncertainties"], "file_name": "uncertainties-tests.tar", "imports": [], "install_dir": "site", "name": "uncertainties-tests", "package_type": "package", "sha256": "31b8ae8b62bfac15cd420ddf7aecb67a11ea6c4911b43ac181763fb0c8c21279", "shared_library": false, "unvendored_tests": false, "version": "3.1.7"}, "unyt": {"depends": ["numpy", "packaging", "sympy"], "file_name": "unyt-3.0.2-py3-none-any.whl", "imports": ["unyt"], "install_dir": "site", "name": "unyt", "package_type": "package", "sha256": "0266261f277eb5ee959c6ddc12b912808ede8f4fc65550474fa52345072adca8", "shared_library": false, "unvendored_tests": true, "version": "3.0.2"}, "unyt-tests": {"depends": ["unyt"], "file_name": "unyt-tests.tar", "imports": [], "install_dir": "site", "name": "unyt-tests", "package_type": "package", "sha256": "dc62293a0d6b7548dea6cffce3fc6560c9efd62fd828038ef9e650a3352bc1fb", "shared_library": false, "unvendored_tests": false, "version": "3.0.2"}, "urllib3": {"depends": [], "file_name": "urllib3-2.2.1-py3-none-any.whl", "imports": ["urllib3"], "install_dir": "site", "name": "urllib3", "package_type": "package", "sha256": "db8c61a24d25a4902704fce3b4dfdd369141859cbeb5b8dd553e22634875f912", "shared_library": false, "unvendored_tests": false, "version": "2.2.1"}, "wcwidth": {"depends": [], "file_name": "wcwidth-0.2.13-py2.py3-none-any.whl", "imports": ["wcwidth"], "install_dir": "site", "name": "wcwidth", "package_type": "package", "sha256": "3384f09b43b9618624cb57500076aa54372a1c6160bf5069f6309c9f9e11a914", "shared_library": false, "unvendored_tests": false, "version": "0.2.13"}, "webencodings": {"depends": [], "file_name": "webencodings-0.5.1-py2.py3-none-any.whl", "imports": ["webencodings"], "install_dir": "site", "name": "webencodings", "package_type": "package", "sha256": "bd558d5be03feae048c02a9b5875f7b7dc5eac1e1c8b167fac3a9575bd13178c", "shared_library": false, "unvendored_tests": false, "version": "0.5.1"}, "wordcloud": {"depends": ["matplotlib"], "file_name": "wordcloud-1.9.3-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["wordcloud"], "install_dir": "site", "name": "wordcloud", "package_type": "package", "sha256": "e35767ded44ad7a2565633e60a011cdf63c9c40ce8755127c80ab12bd71c340b", "shared_library": false, "unvendored_tests": false, "version": "1.9.3"}, "wrapt": {"depends": [], "file_name": "wrapt-1.16.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["wrapt"], "install_dir": "site", "name": "wrapt", "package_type": "package", "sha256": "218ecd2503e989f9ff5e0c44b3270f3faed9e0c1cc989dd30e555840833aba7a", "shared_library": false, "unvendored_tests": false, "version": "1.16.0"}, "xarray": {"depends": ["numpy", "packaging", "pandas"], "file_name": "xarray-2024.3.0-py3-none-any.whl", "imports": ["xarray"], "install_dir": "site", "name": "xarray", "package_type": "package", "sha256": "811da0060896ccf83a10b575e3b73519c2ea6c4f1c53a7cc4b7ec7367f8297b2", "shared_library": false, "unvendored_tests": true, "version": "2024.3.0"}, "xarray-tests": {"depends": ["xarray"], "file_name": "xarray-tests.tar", "imports": [], "install_dir": "site", "name": "xarray-tests", "package_type": "package", "sha256": "ad0d1a70e79d8fd8059283d0e3cc56ddbf0282f64f252b84d9aa18bf183c8f5a", "shared_library": false, "unvendored_tests": false, "version": "2024.3.0"}, "xgboost": {"depends": ["numpy", "scipy", "setuptools"], "file_name": "xgboost-2.1.0.dev0-py3-none-pyodide_2024_0_wasm32.whl", "imports": ["xgboost"], "install_dir": "site", "name": "xgboost", "package_type": "package", "sha256": "4628575b6ceb2e986bbba4356c4864fb32bcbcc60786d3f26d5730012a48712b", "shared_library": false, "unvendored_tests": false, "version": "2.1.0.dev0"}, "xlrd": {"depends": [], "file_name": "xlrd-2.0.1-py2.py3-none-any.whl", "imports": ["xlrd"], "install_dir": "site", "name": "xlrd", "package_type": "package", "sha256": "5dce9ae1baf5f1bca143ae6bc664618ed3cd69d15b7be8d59901296dfd5f316d", "shared_library": false, "unvendored_tests": false, "version": "2.0.1"}, "xxhash": {"depends": [], "file_name": "xxhash-3.4.1-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["xxhash"], "install_dir": "site", "name": "xxhash", "package_type": "package", "sha256": "d7552b7b502fed9a814536ef4192f615c72293c03bc3b4f0abb8a910b025d22b", "shared_library": false, "unvendored_tests": false, "version": "3.4.1"}, "xyzservices": {"depends": [], "file_name": "xyzservices-2024.4.0-py3-none-any.whl", "imports": ["xyzservices"], "install_dir": "site", "name": "xyzservices", "package_type": "package", "sha256": "d83a3998a7ebdaf867608ed25ff2225d735ef165d7d637a53eae60a4019be77c", "shared_library": false, "unvendored_tests": true, "version": "2024.4.0"}, "xyzservices-tests": {"depends": ["xyzservices"], "file_name": "xyzservices-tests.tar", "imports": [], "install_dir": "site", "name": "xyzservices-tests", "package_type": "package", "sha256": "5478c9cfc55e20112bd9786d5170e03498715987db905508288723ce5bd015ba", "shared_library": false, "unvendored_tests": false, "version": "2024.4.0"}, "yarl": {"depends": ["multidict", "idna"], "file_name": "yarl-1.9.4-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["yarl"], "install_dir": "site", "name": "yarl", "package_type": "package", "sha256": "970a80d724db012e4832adbe5f7f25d3070dddec20eac496063ec4c615ba0f5b", "shared_library": false, "unvendored_tests": false, "version": "1.9.4"}, "yt": {"depends": ["ewah_bool_utils", "numpy", "matplotlib", "sympy", "setuptools", "packaging", "unyt", "cmyt", "colorspacious", "tqdm", "tomli", "tomli-w"], "file_name": "yt-4.3.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["yt"], "install_dir": "site", "name": "yt", "package_type": "package", "sha256": "8064f02ce5685790bfa3030a538a5808086ffdd84d4591cb2caaf6d959125564", "shared_library": false, "unvendored_tests": false, "version": "4.3.0"}, "zarr": {"depends": ["numpy", "asciitree", "numcodecs"], "file_name": "zarr-2.16.1-py3-none-any.whl", "imports": ["zarr"], "install_dir": "site", "name": "zarr", "package_type": "package", "sha256": "e8d9f3f619de2b6ab029535822e2ac7d215533c175b10dda90744cd0584edc4b", "shared_library": false, "unvendored_tests": true, "version": "2.16.1"}, "zarr-tests": {"depends": ["zarr"], "file_name": "zarr-tests.tar", "imports": [], "install_dir": "site", "name": "zarr-tests", "package_type": "package", "sha256": "559d33fa87d95d2da09bc0f84fa387ee6e9bf193eecb55b103825659065d804f", "shared_library": false, "unvendored_tests": false, "version": "2.16.1"}, "zengl": {"depends": [], "file_name": "zengl-2.4.1-cp311-abi3-pyodide_2024_0_wasm32.whl", "imports": ["zengl", "_zengl"], "install_dir": "site", "name": "zengl", "package_type": "package", "sha256": "84ca8691ab1b7ac6892fb546f1bb954a9cd97f46b39b25f33e3ee5c68ce44cb5", "shared_library": false, "unvendored_tests": false, "version": "2.4.1"}, "zstandard": {"depends": ["cffi"], "file_name": "zstandard-0.22.0-cp312-cp312-pyodide_2024_0_wasm32.whl", "imports": ["zstandard"], "install_dir": "site", "name": "zstandard", "package_type": "package", "sha256": "2132e35bc2775019e64bb1a88ae0f09c4bb46eb6516681ff7e0f27ef38fade54", "shared_library": false, "unvendored_tests": false, "version": "0.22.0"}}} \ No newline at end of file