Compare commits

...
53 Commits
Author SHA1 Message Date
Timothy Jaeryang Baek 7b8f923981 Merge pull request #5711 from open-webui/dev
0.3.30
2024-09-26 04:13:54 +02:00
Timothy J. Baek be41994d40 Update CHANGELOG.md 2024-09-26 04:12:19 +02:00
Timothy J. Baek 5361896411 doc: changelog 2024-09-26 04:11:13 +02:00
Timothy J. Baek c754c53906 refac 2024-09-26 04:05:28 +02:00
Timothy J. Baek 78d6647885 refac 2024-09-26 03:25:44 +02:00
Timothy J. Baek 4eeb669ac3 refac 2024-09-26 03:21:37 +02:00
Timothy J. Baek 26465f3e92 chore: bump 2024-09-26 03:14:06 +02:00
Timothy J. Baek 9d25207b83 refac 2024-09-26 03:13:38 +02:00
Timothy Jaeryang Baek cc19b8049a Merge pull request #5710 from kivvi3412/fix_o1_max_tokens
Fix: o1 input parameter must be max_completion_tokens
2024-09-26 03:03:15 +02:00
Timothy J. Baek 3a163b6392 fix: pip install database save issue 2024-09-26 03:02:08 +02:00
kivvi 405d0561df Fix: o1 input parameter must be max_completion_tokens 2024-09-26 08:49:59 +08:00
Timothy J. Baek ee33b4e2a3 fix: ollama /embed form_data 2024-09-25 22:34:02 +02:00
Timothy J. Baek 888479aaf0 refac: update toast dismiss behaviour 2024-09-25 20:47:04 +02:00
Timothy Jaeryang Baek 82cda6e522 Merge pull request #5699 from open-webui/dev
0.3.29
2024-09-25 15:46:39 +02:00
Timothy J. Baek 119a7f1933 doc: changelog 2024-09-25 15:45:36 +02:00
Timothy J. Baek 6c4445d545 fix: filter outlet issue 2024-09-25 13:44:06 +02:00
Timothy J. Baek 92b1acd6fb fix: RESET_CONFIG_ON_START not working 2024-09-25 01:06:11 +02:00
Timothy J. Baek 1767b64135 fix: 'call' url search param not working 2024-09-25 01:02:48 +02:00
Timothy Jaeryang Baek e030f261d1 Merge pull request #5675 from sp301415/dev
fix: Fix KaTeX Rendering (Followup)
2024-09-24 20:58:22 +02:00
Hwang In Tak d501ece247 fix: Fix KaTeX corner cases 2024-09-25 02:15:53 +09:00
Timothy Jaeryang Baek 534e4c90ca Merge pull request #5674 from open-webui/dev
0.3.28
2024-09-24 18:52:23 +02:00
Timothy J. Baek 40f2c3521b doc: changelog 2024-09-24 18:50:47 +02:00
Timothy J. Baek 07b1327708 fix 2024-09-24 18:32:14 +02:00
Timothy J. Baek 525095b3de fix: websearch not working issue
#5672
2024-09-24 18:25:21 +02:00
Timothy Jaeryang Baek f84513e856 Merge pull request #5673 from open-webui/dev
refac: readme
2024-09-24 18:19:09 +02:00
Timothy J. Baek bf423b8577 refac: readme 2024-09-24 18:18:32 +02:00
Timothy Jaeryang Baek ba20c71963 Merge pull request #5661 from open-webui/dev
0.3.27
2024-09-24 18:13:08 +02:00
Timothy J. Baek 7bbc57f225 doc: changelog 2024-09-24 18:12:47 +02:00
Timothy J. Baek e703e172e2 chore: format 2024-09-24 18:10:14 +02:00
Timothy Jaeryang Baek 3ff52fd1ad Merge pull request #5655 from sp301415/dev
fix: Fix KaTeX Rendering
2024-09-24 17:44:08 +02:00
Timothy J. Baek e19406cdd7 fix 2024-09-24 17:43:43 +02:00
Hwang In Tak 30e65b33f6 fix: Add comments 2024-09-25 00:41:08 +09:00
Hwang In Tak 3f1255b39e fix: Change inline and block delimiters 2024-09-25 00:10:49 +09:00
Timothy J. Baek 71743b25fe chore: format 2024-09-24 16:42:42 +02:00
Timothy Jaeryang Baek c7e93b32c5 Merge pull request #5660 from open-webui/pypi-release
fix: open-webui serve
2024-09-24 16:36:37 +02:00
Timothy J. Baek 3cee507687 fix: dev2 2024-09-24 16:19:24 +02:00
Timothy J. Baek ff651ddc36 fix: dev1 2024-09-24 16:07:49 +02:00
Timothy Jaeryang Baek c0738cef26 Merge pull request #5659 from open-webui/dev
0.3.26
2024-09-24 15:41:42 +02:00
Timothy J. Baek a44e9a8dda refac 2024-09-24 15:41:23 +02:00
Timothy J. Baek 38b9a63fa5 refac 2024-09-24 15:40:37 +02:00
Timothy J. Baek 2d60e42258 doc: changelog 2024-09-24 15:40:01 +02:00
Timothy Jaeryang Baek 60ac69eb27 Merge pull request #5656 from OriginalSimon/dev
i18n: Update Ukrainian translation
2024-09-24 15:33:15 +02:00
Timothy J. Baek 504d910557 fix: no running event loop issue 2024-09-24 15:31:55 +02:00
Hwang In Tak e48d66f918 fix: Remove unnecessary logging 2024-09-24 22:11:05 +09:00
Hwang In Tak 0bfbace9aa fix: Simplify regex 2024-09-24 22:00:01 +09:00
Timothy Jaeryang Baek 019cf8199f Merge pull request #5657 from open-webui/dev
0.3.25
2024-09-24 14:07:23 +02:00
Timothy J. Baek c5f85eed92 doc: changelog 2024-09-24 14:07:13 +02:00
Timothy J. Baek 21719ccdf1 chore: format 2024-09-24 14:05:44 +02:00
Timothy J. Baek 299b3d72cf fix: rate responses 2024-09-24 14:02:41 +02:00
Timothy J. Baek 85e9e231ed fix: image generation 2024-09-24 13:54:34 +02:00
Simon f382a78e31 Update translation.json 2024-09-24 13:47:51 +02:00
Hwang In Tak 377cc427b6 fix: Remove unnecessary logging 2024-09-24 20:40:50 +09:00
Hwang In Tak 214546399a fix: fix katex rendering 2024-09-24 16:58:15 +09:00
62 changed files with 701 additions and 211 deletions
+45
View File
@@ -5,6 +5,51 @@ 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/), 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). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.3.30] - 2024-09-26
### Fixed
- **🍞 Update Available Toast Dismissal**: Enhanced user experience by ensuring that once the update available notification is dismissed, it won't reappear for 24 hours.
- **📋 Ollama /embed Form Data**: Adjusted the integration inaccuracies in the /embed form data to ensure it perfectly matches with Ollama's specifications.
- **🔧 O1 Max Completion Tokens Issue**: Resolved compatibility issues with OpenAI's o1 models max_completion_tokens param to ensure smooth operation.
- **🔄 Pip Install Database Issue**: Fixed a critical issue where database changes during pip installations were reverting and not saving chat logs, now ensuring data persistence and reliability in chat operations.
- **🏷️ Chat Rename Tab Update**: Fixed the functionality to change the web browser's tab title simultaneously when a chat is renamed, keeping tab titles consistent.
## [0.3.29] - 2023-09-25
### Fixed
- **🔧 KaTeX Rendering Improvement**: Resolved specific corner cases in KaTeX rendering to enhance the display of complex mathematical notation.
- **📞 'Call' URL Parameter Fix**: Corrected functionality for 'call' URL search parameter ensuring reliable activation of voice calls through URL triggers.
- **🔄 Configuration Reset Fix**: Fixed the RESET_CONFIG_ON_START to ensure settings revert to default correctly upon each startup, improving reliability in configuration management.
- **🌍 Filter Outlet Hook Fix**: Addressed issues in the filter outlet hook, ensuring all filter functions operate as intended.
## [0.3.28] - 2024-09-24
### Fixed
- **🔍 Web Search Functionality**: Corrected an issue where the web search option was not functioning properly.
## [0.3.27] - 2024-09-24
### Fixed
- **🔄 Periodic Cleanup Error Resolved**: Fixed a critical RuntimeError related to the 'periodic_usage_pool_cleanup' coroutine, ensuring smooth and efficient performance post-pip install, correcting a persisting issue from version 0.3.26.
- **📊 Enhanced LaTeX Rendering**: Improved rendering for LaTeX content, enhancing clarity and visual presentation in documents and mathematical models.
## [0.3.26] - 2024-09-24
### Fixed
- **🔄 Event Loop Error Resolution**: Addressed a critical error where a missing running event loop caused 'periodic_usage_pool_cleanup' to fail with pip installs. This fix ensures smoother and more reliable updates and installations, enhancing overall system stability.
## [0.3.25] - 2024-09-24
### Fixed
- **🖼️ Image Generation Functionality**: Resolved an issue where image generation was not functioning, restoring full capability for visual content creation.
- **⚖️ Rate Response Corrections**: Addressed a problem where rate responses were not working, ensuring reliable feedback mechanisms are operational.
## [0.3.24] - 2024-09-24 ## [0.3.24] - 2024-09-24
### Added ### Added
+22 -2
View File
@@ -59,11 +59,31 @@ Don't forget to explore our sibling project, [Open WebUI Community](https://open
## How to Install 🚀 ## How to Install 🚀
> [!NOTE] ### Installation via Python pip 🐍
> Please note that for certain Docker environments, additional configurations might be needed. If you encounter any connection issues, our detailed guide on [Open WebUI Documentation](https://docs.openwebui.com/) is ready to assist you.
Open WebUI can be installed using pip, the Python package installer. Before proceeding, ensure you're using **Python 3.11** to avoid compatibility issues.
1. **Install Open WebUI**:
Open your terminal and run the following command to install Open WebUI:
```bash
pip install open-webui
```
2. **Running Open WebUI**:
After installation, you can start Open WebUI by executing:
```bash
open-webui serve
```
This will start the Open WebUI server, which you can access at [http://localhost:8080](http://localhost:8080)
### Quick Start with Docker 🐳 ### Quick Start with Docker 🐳
> [!NOTE]
> Please note that for certain Docker environments, additional configurations might be needed. If you encounter any connection issues, our detailed guide on [Open WebUI Documentation](https://docs.openwebui.com/) is ready to assist you.
> [!WARNING] > [!WARNING]
> When using Docker to install Open WebUI, make sure to include the `-v open-webui:/app/backend/data` in your Docker command. This step is crucial as it ensures your database is properly mounted and prevents any loss of data. > When using Docker to install Open WebUI, make sure to include the `-v open-webui:/app/backend/data` in your Docker command. This step is crucial as it ensures your database is properly mounted and prevents any loss of data.
+1
View File
@@ -52,6 +52,7 @@ def serve(
) )
os.environ["USE_CUDA_DOCKER"] = "false" os.environ["USE_CUDA_DOCKER"] = "false"
os.environ["LD_LIBRARY_PATH"] = ":".join(LD_LIBRARY_PATH) os.environ["LD_LIBRARY_PATH"] = ":".join(LD_LIBRARY_PATH)
import open_webui.main # we need set environment variables before importing main import open_webui.main # we need set environment variables before importing main
uvicorn.run(open_webui.main.app, host=host, port=port, forwarded_allow_ips="*") uvicorn.run(open_webui.main.app, host=host, port=port, forwarded_allow_ips="*")
+9 -1
View File
@@ -543,10 +543,18 @@ class GenerateEmbeddingsForm(BaseModel):
keep_alive: Optional[Union[int, str]] = None keep_alive: Optional[Union[int, str]] = None
class GenerateEmbedForm(BaseModel):
model: str
input: str
truncate: Optional[bool]
options: Optional[dict] = None
keep_alive: Optional[Union[int, str]] = None
@app.post("/api/embed") @app.post("/api/embed")
@app.post("/api/embed/{url_idx}") @app.post("/api/embed/{url_idx}")
async def generate_embeddings( async def generate_embeddings(
form_data: GenerateEmbeddingsForm, form_data: GenerateEmbedForm,
url_idx: Optional[int] = None, url_idx: Optional[int] = None,
user=Depends(get_verified_user), user=Depends(get_verified_user),
): ):
+3
View File
@@ -415,6 +415,9 @@ async def generate_chat_completion(
payload["max_tokens"] = payload["max_completion_tokens"] payload["max_tokens"] = payload["max_completion_tokens"]
del payload["max_completion_tokens"] del payload["max_completion_tokens"]
else: else:
if payload["model"].lower().startswith("o1-") and "max_tokens" in payload:
payload["max_completion_tokens"] = payload["max_tokens"]
del payload["max_tokens"]
if "max_tokens" in payload and "max_completion_tokens" in payload: if "max_tokens" in payload and "max_completion_tokens" in payload:
del payload["max_tokens"] del payload["max_tokens"]
+4 -4
View File
@@ -48,8 +48,6 @@ else:
) )
app = socketio.ASGIApp(sio, socketio_path="/ws/socket.io")
# Dictionary to maintain the user pool # Dictionary to maintain the user pool
if WEBSOCKET_MANAGER == "redis": if WEBSOCKET_MANAGER == "redis":
@@ -92,8 +90,10 @@ async def periodic_usage_pool_cleanup():
await asyncio.sleep(TIMEOUT_DURATION) await asyncio.sleep(TIMEOUT_DURATION)
# Start the cleanup task when your app starts app = socketio.ASGIApp(
asyncio.create_task(periodic_usage_pool_cleanup()) sio,
socketio_path="/ws/socket.io",
)
def get_models_in_use(): def get_models_in_use():
+6
View File
@@ -87,6 +87,12 @@ def save_to_db(data):
db.commit() db.commit()
def reset_config():
with get_db() as db:
db.query(Config).delete()
db.commit()
# When initializing, check if config.json exists and migrate it to the database # When initializing, check if config.json exists and migrate it to the database
if os.path.exists(f"{DATA_DIR}/config.json"): if os.path.exists(f"{DATA_DIR}/config.json"):
data = load_json_config() data = load_json_config()
+10 -12
View File
@@ -221,6 +221,12 @@ if FROM_INIT_PY:
else: else:
shutil.copy2(item, dest) shutil.copy2(item, dest)
# Zip the data directory
shutil.make_archive(DATA_DIR.parent / "open_webui_data", "zip", DATA_DIR)
# Remove the old data directory
shutil.rmtree(DATA_DIR)
DATA_DIR = Path(os.getenv("DATA_DIR", OPEN_WEBUI_DIR / "data")) DATA_DIR = Path(os.getenv("DATA_DIR", OPEN_WEBUI_DIR / "data"))
@@ -234,18 +240,6 @@ if FROM_INIT_PY:
).resolve() ).resolve()
RESET_CONFIG_ON_START = (
os.environ.get("RESET_CONFIG_ON_START", "False").lower() == "true"
)
if RESET_CONFIG_ON_START:
try:
os.remove(f"{DATA_DIR}/config.json")
with open(f"{DATA_DIR}/config.json", "w") as f:
f.write("{}")
except Exception:
pass
#################################### ####################################
# Database # Database
#################################### ####################################
@@ -265,6 +259,10 @@ if "postgres://" in DATABASE_URL:
DATABASE_URL = DATABASE_URL.replace("postgres://", "postgresql://") DATABASE_URL = DATABASE_URL.replace("postgres://", "postgresql://")
RESET_CONFIG_ON_START = (
os.environ.get("RESET_CONFIG_ON_START", "False").lower() == "true"
)
#################################### ####################################
# WEBUI_AUTH (Required for security) # WEBUI_AUTH (Required for security)
#################################### ####################################
+10 -2
View File
@@ -8,6 +8,8 @@ import shutil
import sys import sys
import time import time
import uuid import uuid
import asyncio
from contextlib import asynccontextmanager from contextlib import asynccontextmanager
from typing import Optional from typing import Optional
@@ -31,7 +33,7 @@ from open_webui.apps.openai.main import (
from open_webui.apps.openai.main import get_all_models as get_openai_models from open_webui.apps.openai.main import get_all_models as get_openai_models
from open_webui.apps.rag.main import app as rag_app from open_webui.apps.rag.main import app as rag_app
from open_webui.apps.rag.utils import get_rag_context, rag_template from open_webui.apps.rag.utils import get_rag_context, rag_template
from open_webui.apps.socket.main import app as socket_app from open_webui.apps.socket.main import app as socket_app, periodic_usage_pool_cleanup
from open_webui.apps.socket.main import get_event_call, get_event_emitter from open_webui.apps.socket.main import get_event_call, get_event_emitter
from open_webui.apps.webui.internal.db import Session from open_webui.apps.webui.internal.db import Session
from open_webui.apps.webui.main import app as webui_app from open_webui.apps.webui.main import app as webui_app
@@ -77,6 +79,7 @@ from open_webui.config import (
WEBUI_NAME, WEBUI_NAME,
AppConfig, AppConfig,
run_migrations, run_migrations,
reset_config,
) )
from open_webui.constants import ERROR_MESSAGES, TASKS, WEBHOOK_MESSAGES from open_webui.constants import ERROR_MESSAGES, TASKS, WEBHOOK_MESSAGES
from open_webui.env import ( from open_webui.env import (
@@ -90,6 +93,7 @@ from open_webui.env import (
WEBUI_SESSION_COOKIE_SAME_SITE, WEBUI_SESSION_COOKIE_SAME_SITE,
WEBUI_SESSION_COOKIE_SECURE, WEBUI_SESSION_COOKIE_SECURE,
WEBUI_URL, WEBUI_URL,
RESET_CONFIG_ON_START,
) )
from fastapi import ( from fastapi import (
Depends, Depends,
@@ -184,6 +188,11 @@ https://github.com/open-webui/open-webui
@asynccontextmanager @asynccontextmanager
async def lifespan(app: FastAPI): async def lifespan(app: FastAPI):
run_migrations() run_migrations()
if RESET_CONFIG_ON_START:
reset_config()
asyncio.create_task(periodic_usage_pool_cleanup())
yield yield
@@ -851,7 +860,6 @@ async def inspect_websocket(request: Request, call_next):
app.mount("/ws", socket_app) app.mount("/ws", socket_app)
app.mount("/ollama", ollama_app) app.mount("/ollama", ollama_app)
app.mount("/openai", openai_app) app.mount("/openai", openai_app)
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "open-webui", "name": "open-webui",
"version": "0.3.24", "version": "0.3.30",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "open-webui", "name": "open-webui",
"version": "0.3.24", "version": "0.3.30",
"dependencies": { "dependencies": {
"@codemirror/lang-javascript": "^6.2.2", "@codemirror/lang-javascript": "^6.2.2",
"@codemirror/lang-python": "^6.1.6", "@codemirror/lang-python": "^6.1.6",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "open-webui", "name": "open-webui",
"version": "0.3.24", "version": "0.3.30",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "npm run pyodide:fetch && vite dev --host", "dev": "npm run pyodide:fetch && vite dev --host",
+51 -34
View File
@@ -31,7 +31,8 @@
currentChatPage, currentChatPage,
temporaryChatEnabled, temporaryChatEnabled,
mobile, mobile,
showOverview showOverview,
chatTitle
} from '$lib/stores'; } from '$lib/stores';
import { import {
convertMessagesToHistory, convertMessagesToHistory,
@@ -102,7 +103,6 @@
let chat = null; let chat = null;
let tags = []; let tags = [];
let title = '';
let history = { let history = {
messages: {}, messages: {},
currentId: null currentId: null
@@ -296,6 +296,8 @@
const chatInput = document.getElementById('chat-textarea'); const chatInput = document.getElementById('chat-textarea');
chatInput?.focus(); chatInput?.focus();
chats.subscribe(() => {});
}); });
onDestroy(() => { onDestroy(() => {
@@ -313,10 +315,11 @@
window.history.replaceState(history.state, '', `/`); window.history.replaceState(history.state, '', `/`);
} }
await chatId.set('');
autoScroll = true; autoScroll = true;
title = ''; await chatId.set('');
await chatTitle.set('');
history = { history = {
messages: {}, messages: {},
currentId: null currentId: null
@@ -357,6 +360,7 @@
if ($page.url.searchParams.get('call') === 'true') { if ($page.url.searchParams.get('call') === 'true') {
showCallOverlay.set(true); showCallOverlay.set(true);
showControls.set(true);
} }
selectedModels = selectedModels.map((modelId) => selectedModels = selectedModels.map((modelId) =>
@@ -397,7 +401,8 @@
(chatContent?.history ?? undefined) !== undefined (chatContent?.history ?? undefined) !== undefined
? chatContent.history ? chatContent.history
: convertMessagesToHistory(chatContent.messages); : convertMessagesToHistory(chatContent.messages);
title = chatContent.title;
chatTitle.set(chatContent.title);
const userSettings = await getUserSettings(localStorage.token); const userSettings = await getUserSettings(localStorage.token);
@@ -482,11 +487,12 @@
} }
} }
await tick();
if ($chatId == chatId) { if ($chatId == chatId) {
if (!$temporaryChatEnabled) { if (!$temporaryChatEnabled) {
chat = await updateChatById(localStorage.token, chatId, { chat = await updateChatById(localStorage.token, chatId, {
models: selectedModels, models: selectedModels,
messages: messages,
history: history, history: history,
params: params, params: params,
files: chatFiles files: chatFiles
@@ -1133,13 +1139,6 @@
} }
} }
} }
await chatCompletedHandler(
_chatId,
model.id,
responseMessageId,
createMessagesList(responseMessageId)
);
} else { } else {
if (res !== null) { if (res !== null) {
const error = await res.json(); const error = await res.json();
@@ -1168,11 +1167,18 @@
(status) => status.action !== 'knowledge_search' (status) => status.action !== 'knowledge_search'
); );
} }
history.messages[responseMessageId] = responseMessage;
} }
await saveChatHandler(_chatId); await saveChatHandler(_chatId);
history.messages[responseMessageId] = responseMessage;
await chatCompletedHandler(
_chatId,
model.id,
responseMessageId,
createMessagesList(responseMessageId)
);
stopResponseFlag = false; stopResponseFlag = false;
await tick(); await tick();
@@ -1205,8 +1211,8 @@
const messages = createMessagesList(responseMessageId); const messages = createMessagesList(responseMessageId);
if (messages.length == 2 && messages.at(-1).content !== '' && selectedModels[0] === model.id) { if (messages.length == 2 && messages.at(-1).content !== '' && selectedModels[0] === model.id) {
window.history.replaceState(history.state, '', `/c/${_chatId}`); window.history.replaceState(history.state, '', `/c/${_chatId}`);
const _title = await generateChatTitle(userPrompt); const title = await generateChatTitle(userPrompt);
await setChatTitle(_chatId, _title); await setChatTitle(_chatId, title);
} }
return _response; return _response;
@@ -1429,13 +1435,6 @@
} }
} }
await chatCompletedHandler(
_chatId,
model.id,
responseMessageId,
createMessagesList(responseMessageId)
);
if ($settings.notificationEnabled && !document.hasFocus()) { if ($settings.notificationEnabled && !document.hasFocus()) {
const notification = new Notification(`${model.id}`, { const notification = new Notification(`${model.id}`, {
body: responseMessage.content, body: responseMessage.content,
@@ -1463,6 +1462,13 @@
history.messages[responseMessageId] = responseMessage; history.messages[responseMessageId] = responseMessage;
await chatCompletedHandler(
_chatId,
model.id,
responseMessageId,
createMessagesList(responseMessageId)
);
stopResponseFlag = false; stopResponseFlag = false;
await tick(); await tick();
@@ -1495,8 +1501,8 @@
const messages = createMessagesList(responseMessageId); const messages = createMessagesList(responseMessageId);
if (messages.length == 2 && selectedModels[0] === model.id) { if (messages.length == 2 && selectedModels[0] === model.id) {
window.history.replaceState(history.state, '', `/c/${_chatId}`); window.history.replaceState(history.state, '', `/c/${_chatId}`);
const _title = await generateChatTitle(userPrompt); const title = await generateChatTitle(userPrompt);
await setChatTitle(_chatId, _title); await setChatTitle(_chatId, title);
} }
return _response; return _response;
@@ -1670,22 +1676,27 @@
} }
}; };
const setChatTitle = async (_chatId, _title) => { const setChatTitle = async (_chatId, title) => {
if (_chatId === $chatId) { if (_chatId === $chatId) {
title = _title; chatTitle.set(title);
} }
if (!$temporaryChatEnabled) { if (!$temporaryChatEnabled) {
chat = await updateChatById(localStorage.token, _chatId, { title: _title }); chat = await updateChatById(localStorage.token, _chatId, { title: title });
currentChatPage.set(1); currentChatPage.set(1);
await chats.set(await getChatList(localStorage.token, $currentChatPage)); await chats.set(await getChatList(localStorage.token, $currentChatPage));
} }
}; };
const getWebSearchResults = async (model: string, parentId: string, responseId: string) => { const getWebSearchResults = async (
const responseMessage = history.messages[responseId]; model: string,
parentId: string,
responseMessageId: string
) => {
const responseMessage = history.messages[responseMessageId];
const userMessage = history.messages[parentId]; const userMessage = history.messages[parentId];
const messages = createMessagesList(history.currentId);
responseMessage.statusHistory = [ responseMessage.statusHistory = [
{ {
@@ -1810,8 +1821,8 @@
<svelte:head> <svelte:head>
<title> <title>
{title {$chatTitle
? `${title.length > 30 ? `${title.slice(0, 30)}...` : title} | ${$WEBUI_NAME}` ? `${$chatTitle.length > 30 ? `${$chatTitle.slice(0, 30)}...` : $chatTitle} | ${$WEBUI_NAME}`
: `${$WEBUI_NAME}`} : `${$WEBUI_NAME}`}
</title> </title>
</svelte:head> </svelte:head>
@@ -1856,7 +1867,13 @@
/> />
{/if} {/if}
<Navbar {chat} {title} bind:selectedModels shareEnabled={!!history.currentId} {initNewChat} /> <Navbar
{chat}
title={$chatTitle}
bind:selectedModels
shareEnabled={!!history.currentId}
{initNewChat}
/>
<PaneGroup direction="horizontal" class="w-full h-full"> <PaneGroup direction="horizontal" class="w-full h-full">
<Pane defaultSize={50} class="h-full flex w-full relative"> <Pane defaultSize={50} class="h-full flex w-full relative">
@@ -7,9 +7,8 @@
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();
export let messageId = null;
export let show = false;
export let message; export let message;
export let show = false;
let LIKE_REASONS = []; let LIKE_REASONS = [];
let DISLIKE_REASONS = []; let DISLIKE_REASONS = [];
@@ -54,8 +53,10 @@
const submitHandler = () => { const submitHandler = () => {
console.log('submitHandler'); console.log('submitHandler');
message.annotation.reason = selectedReason; if (!selectedReason) {
message.annotation.comment = comment; toast.error($i18n.t('Please select a reason'));
return;
}
dispatch('submit', { dispatch('submit', {
reason: selectedReason, reason: selectedReason,
@@ -69,7 +70,7 @@
<div <div
class=" my-2.5 rounded-xl px-4 py-3 border dark:border-gray-850" class=" my-2.5 rounded-xl px-4 py-3 border dark:border-gray-850"
id="message-feedback-{messageId}" id="message-feedback-{message.id}"
> >
<div class="flex justify-between items-center"> <div class="flex justify-between items-center">
<div class=" text-sm">{$i18n.t('Tell us more:')}</div> <div class=" text-sm">{$i18n.t('Tell us more:')}</div>
@@ -304,12 +304,12 @@
console.log(res); console.log(res);
if (res) { if (res) {
message.files = res.map((image) => ({ const files = res.map((image) => ({
type: 'image', type: 'image',
url: `${image.url}` url: `${image.url}`
})); }));
dispatch('save', message); dispatch('save', { ...message, files: files });
} }
generatingImage = false; generatingImage = false;
@@ -1035,11 +1035,17 @@
{#if message.done && showRateComment} {#if message.done && showRateComment}
<RateComment <RateComment
messageId={message.id}
bind:show={showRateComment}
bind:message bind:message
bind:show={showRateComment}
on:submit={(e) => { on:submit={(e) => {
dispatch('update'); dispatch('save', {
...message,
annotation: {
...message.annotation,
comment: e.detail.comment,
reason: e.detail.reason
}
});
(model?.actions ?? []) (model?.actions ?? [])
.filter((action) => action?.__webui__ ?? false) .filter((action) => action?.__webui__ ?? false)
.forEach((action) => { .forEach((action) => {
@@ -14,7 +14,15 @@
getChatListByTagName, getChatListByTagName,
updateChatById updateChatById
} from '$lib/apis/chats'; } from '$lib/apis/chats';
import { chatId, chats, mobile, pinnedChats, showSidebar, currentChatPage } from '$lib/stores'; import {
chatId,
chatTitle as _chatTitle,
chats,
mobile,
pinnedChats,
showSidebar,
currentChatPage
} from '$lib/stores';
import ChatMenu from './ChatMenu.svelte'; import ChatMenu from './ChatMenu.svelte';
import ShareChatModal from '$lib/components/chat/ShareChatModal.svelte'; import ShareChatModal from '$lib/components/chat/ShareChatModal.svelte';
@@ -33,14 +41,18 @@
let chatTitle = chat.title; let chatTitle = chat.title;
const editChatTitle = async (id, _title) => { const editChatTitle = async (id, title) => {
if (_title === '') { if (title === '') {
toast.error($i18n.t('Title cannot be an empty string.')); toast.error($i18n.t('Title cannot be an empty string.'));
} else { } else {
await updateChatById(localStorage.token, id, { await updateChatById(localStorage.token, id, {
title: _title title: title
}); });
if (id === $chatId) {
_chatTitle.set(title);
}
currentChatPage.set(1); currentChatPage.set(1);
await chats.set(await getChatList(localStorage.token, $currentChatPage)); await chats.set(await getChatList(localStorage.token, $currentChatPage));
await pinnedChats.set(await getChatListByTagName(localStorage.token, 'pinned')); await pinnedChats.set(await getChatListByTagName(localStorage.token, 'pinned'));
@@ -14,7 +14,7 @@
</script> </script>
<div <div
class="flex items-start bg-[--info-bg] border border-[--info-border] text-[--info-text] rounded-lg px-3.5 py-3 text-xs" class="flex items-start bg-[#F1F8FE] dark:bg-[#020C1D] border border-[3371D5] dark:border-[#03113B] text-[#3371D5] dark:text-[#6795EC] rounded-lg px-3.5 py-3 text-xs max-w-80 pr-2 w-full shadow-lg"
> >
<div class="flex-1 font-medium"> <div class="flex-1 font-medium">
{$i18n.t(`A new version (v{{LATEST_VERSION}}) is now available.`, { {$i18n.t(`A new version (v{{LATEST_VERSION}}) is now available.`, {
@@ -35,6 +35,7 @@
class=" hover:text-blue-900 dark:hover:text-blue-300 transition" class=" hover:text-blue-900 dark:hover:text-blue-300 transition"
on:click={() => { on:click={() => {
console.log('closeToast'); console.log('closeToast');
localStorage.setItem('dismissedUpdateToast', Date.now().toString());
dispatch('closeToast'); dispatch('closeToast');
}} }}
> >
@@ -497,6 +497,7 @@
"Plain text (.txt)": "نص عادي (.txt)", "Plain text (.txt)": "نص عادي (.txt)",
"Playground": "مكان التجربة", "Playground": "مكان التجربة",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "موقف ايجابي", "Positive attitude": "موقف ايجابي",
"Previous 30 days": "أخر 30 يوم", "Previous 30 days": "أخر 30 يوم",
"Previous 7 days": "أخر 7 أيام", "Previous 7 days": "أخر 7 أيام",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Plain text (.txt)", "Plain text (.txt)": "Plain text (.txt)",
"Playground": "Плейграунд", "Playground": "Плейграунд",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "Позитивна ативност", "Positive attitude": "Позитивна ативност",
"Previous 30 days": "Предыдущите 30 дни", "Previous 30 days": "Предыдущите 30 дни",
"Previous 7 days": "Предыдущите 7 дни", "Previous 7 days": "Предыдущите 7 дни",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "প্লায়েন টেক্সট (.txt)", "Plain text (.txt)": "প্লায়েন টেক্সট (.txt)",
"Playground": "খেলাঘর", "Playground": "খেলাঘর",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "পজিটিভ আক্রমণ", "Positive attitude": "পজিটিভ আক্রমণ",
"Previous 30 days": "পূর্ব ৩০ দিন", "Previous 30 days": "পূর্ব ৩০ দিন",
"Previous 7 days": "পূর্ব ৭ দিন", "Previous 7 days": "পূর্ব ৭ দিন",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Text pla (.txt)", "Plain text (.txt)": "Text pla (.txt)",
"Playground": "Zona de jocs", "Playground": "Zona de jocs",
"Please carefully review the following warnings:": "Si us plau, revisa els següents avisos amb cura:", "Please carefully review the following warnings:": "Si us plau, revisa els següents avisos amb cura:",
"Please select a reason": "",
"Positive attitude": "Actitud positiva", "Positive attitude": "Actitud positiva",
"Previous 30 days": "30 dies anteriors", "Previous 30 days": "30 dies anteriors",
"Previous 7 days": "7 dies anteriors", "Previous 7 days": "7 dies anteriors",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "", "Plain text (.txt)": "",
"Playground": "Dulaanan", "Playground": "Dulaanan",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "", "Positive attitude": "",
"Previous 30 days": "", "Previous 30 days": "",
"Previous 7 days": "", "Previous 7 days": "",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Nur Text (.txt)", "Plain text (.txt)": "Nur Text (.txt)",
"Playground": "Testumgebung", "Playground": "Testumgebung",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "Positive Einstellung", "Positive attitude": "Positive Einstellung",
"Previous 30 days": "Vorherige 30 Tage", "Previous 30 days": "Vorherige 30 Tage",
"Previous 7 days": "Vorherige 7 Tage", "Previous 7 days": "Vorherige 7 Tage",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Plain text (.txt)", "Plain text (.txt)": "Plain text (.txt)",
"Playground": "Playground", "Playground": "Playground",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "", "Positive attitude": "",
"Previous 30 days": "", "Previous 30 days": "",
"Previous 7 days": "", "Previous 7 days": "",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "", "Plain text (.txt)": "",
"Playground": "", "Playground": "",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "", "Positive attitude": "",
"Previous 30 days": "", "Previous 30 days": "",
"Previous 7 days": "", "Previous 7 days": "",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "", "Plain text (.txt)": "",
"Playground": "", "Playground": "",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "", "Positive attitude": "",
"Previous 30 days": "", "Previous 30 days": "",
"Previous 7 days": "", "Previous 7 days": "",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Texto plano (.txt)", "Plain text (.txt)": "Texto plano (.txt)",
"Playground": "Patio de juegos", "Playground": "Patio de juegos",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "Actitud positiva", "Positive attitude": "Actitud positiva",
"Previous 30 days": "Últimos 30 días", "Previous 30 days": "Últimos 30 días",
"Previous 7 days": "Últimos 7 días", "Previous 7 days": "Últimos 7 días",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "متن ساده (.txt)", "Plain text (.txt)": "متن ساده (.txt)",
"Playground": "زمین بازی", "Playground": "زمین بازی",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "نظرات مثبت", "Positive attitude": "نظرات مثبت",
"Previous 30 days": "30 روز قبل", "Previous 30 days": "30 روز قبل",
"Previous 7 days": "7 روز قبل", "Previous 7 days": "7 روز قبل",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Pelkkä teksti (.txt)", "Plain text (.txt)": "Pelkkä teksti (.txt)",
"Playground": "Leikkipaikka", "Playground": "Leikkipaikka",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "Positiivinen asenne", "Positive attitude": "Positiivinen asenne",
"Previous 30 days": "Edelliset 30 päivää", "Previous 30 days": "Edelliset 30 päivää",
"Previous 7 days": "Edelliset 7 päivää", "Previous 7 days": "Edelliset 7 päivää",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Texte simple (.txt)", "Plain text (.txt)": "Texte simple (.txt)",
"Playground": "Aire de jeux", "Playground": "Aire de jeux",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "Attitude positive", "Positive attitude": "Attitude positive",
"Previous 30 days": "30 derniers jours", "Previous 30 days": "30 derniers jours",
"Previous 7 days": "7 derniers jours", "Previous 7 days": "7 derniers jours",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Texte simple (.txt)", "Plain text (.txt)": "Texte simple (.txt)",
"Playground": "Playground", "Playground": "Playground",
"Please carefully review the following warnings:": "Veuillez lire attentivement les avertissements suivants :", "Please carefully review the following warnings:": "Veuillez lire attentivement les avertissements suivants :",
"Please select a reason": "",
"Positive attitude": "Attitude positive", "Positive attitude": "Attitude positive",
"Previous 30 days": "30 derniers jours", "Previous 30 days": "30 derniers jours",
"Previous 7 days": "7 derniers jours", "Previous 7 days": "7 derniers jours",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "טקסט פשוט (.txt)", "Plain text (.txt)": "טקסט פשוט (.txt)",
"Playground": "אזור משחקים", "Playground": "אזור משחקים",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "גישה חיובית", "Positive attitude": "גישה חיובית",
"Previous 30 days": "30 הימים הקודמים", "Previous 30 days": "30 הימים הקודמים",
"Previous 7 days": "7 הימים הקודמים", "Previous 7 days": "7 הימים הקודמים",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "सादा पाठ (.txt)", "Plain text (.txt)": "सादा पाठ (.txt)",
"Playground": "कार्यक्षेत्र", "Playground": "कार्यक्षेत्र",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "सकारात्मक रवैया", "Positive attitude": "सकारात्मक रवैया",
"Previous 30 days": "पिछले 30 दिन", "Previous 30 days": "पिछले 30 दिन",
"Previous 7 days": "पिछले 7 दिन", "Previous 7 days": "पिछले 7 दिन",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Običan tekst (.txt)", "Plain text (.txt)": "Običan tekst (.txt)",
"Playground": "Igralište", "Playground": "Igralište",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "Pozitivan stav", "Positive attitude": "Pozitivan stav",
"Previous 30 days": "Prethodnih 30 dana", "Previous 30 days": "Prethodnih 30 dana",
"Previous 7 days": "Prethodnih 7 dana", "Previous 7 days": "Prethodnih 7 dana",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Teks biasa (.txt)", "Plain text (.txt)": "Teks biasa (.txt)",
"Playground": "Taman bermain", "Playground": "Taman bermain",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "Sikap positif", "Positive attitude": "Sikap positif",
"Previous 30 days": "30 hari sebelumnya", "Previous 30 days": "30 hari sebelumnya",
"Previous 7 days": "7 hari sebelumnya", "Previous 7 days": "7 hari sebelumnya",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Testo normale (.txt)", "Plain text (.txt)": "Testo normale (.txt)",
"Playground": "Terreno di gioco", "Playground": "Terreno di gioco",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "Attitudine positiva", "Positive attitude": "Attitudine positiva",
"Previous 30 days": "Ultimi 30 giorni", "Previous 30 days": "Ultimi 30 giorni",
"Previous 7 days": "Ultimi 7 giorni", "Previous 7 days": "Ultimi 7 giorni",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "プレーンテキスト (.txt)", "Plain text (.txt)": "プレーンテキスト (.txt)",
"Playground": "プレイグラウンド", "Playground": "プレイグラウンド",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "陽気な態度", "Positive attitude": "陽気な態度",
"Previous 30 days": "前の30日間", "Previous 30 days": "前の30日間",
"Previous 7 days": "前の7日間", "Previous 7 days": "前の7日間",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "ტექსტი (.txt)", "Plain text (.txt)": "ტექსტი (.txt)",
"Playground": "სათამაშო მოედანი", "Playground": "სათამაშო მოედანი",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "პოზიტიური ანგარიში", "Positive attitude": "პოზიტიური ანგარიში",
"Previous 30 days": "უკან 30 დღე", "Previous 30 days": "უკან 30 დღე",
"Previous 7 days": "უკან 7 დღე", "Previous 7 days": "უკან 7 დღე",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "일반 텍스트(.txt)", "Plain text (.txt)": "일반 텍스트(.txt)",
"Playground": "놀이터", "Playground": "놀이터",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "긍정적인 자세", "Positive attitude": "긍정적인 자세",
"Previous 30 days": "이전 30일", "Previous 30 days": "이전 30일",
"Previous 7 days": "이전 7일", "Previous 7 days": "이전 7일",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Grynas tekstas (.txt)", "Plain text (.txt)": "Grynas tekstas (.txt)",
"Playground": "Eksperimentavimo erdvė", "Playground": "Eksperimentavimo erdvė",
"Please carefully review the following warnings:": "Peržiūrėkite šiuos perspėjimus:", "Please carefully review the following warnings:": "Peržiūrėkite šiuos perspėjimus:",
"Please select a reason": "",
"Positive attitude": "Pozityvus elgesys", "Positive attitude": "Pozityvus elgesys",
"Previous 30 days": "Paskutinės 30 dienų", "Previous 30 days": "Paskutinės 30 dienų",
"Previous 7 days": "Paskutinės 7 dienos", "Previous 7 days": "Paskutinės 7 dienos",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Teks biasa (.txt)", "Plain text (.txt)": "Teks biasa (.txt)",
"Playground": "Taman Permainan", "Playground": "Taman Permainan",
"Please carefully review the following warnings:": "Sila semak dengan teliti amaran berikut:", "Please carefully review the following warnings:": "Sila semak dengan teliti amaran berikut:",
"Please select a reason": "",
"Positive attitude": "Sikap positif", "Positive attitude": "Sikap positif",
"Previous 30 days": "30 hari sebelumnya", "Previous 30 days": "30 hari sebelumnya",
"Previous 7 days": "7 hari sebelumnya", "Previous 7 days": "7 hari sebelumnya",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Ren tekst (.txt)", "Plain text (.txt)": "Ren tekst (.txt)",
"Playground": "Lekeplass", "Playground": "Lekeplass",
"Please carefully review the following warnings:": "Vær vennlig å lese gjennom følgende advarsler grundig:", "Please carefully review the following warnings:": "Vær vennlig å lese gjennom følgende advarsler grundig:",
"Please select a reason": "",
"Positive attitude": "Positiv holdning", "Positive attitude": "Positiv holdning",
"Previous 30 days": "Forrige 30 dager", "Previous 30 days": "Forrige 30 dager",
"Previous 7 days": "Forrige 7 dager", "Previous 7 days": "Forrige 7 dager",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Platte tekst (.txt)", "Plain text (.txt)": "Platte tekst (.txt)",
"Playground": "Speeltuin", "Playground": "Speeltuin",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "Positieve positie", "Positive attitude": "Positieve positie",
"Previous 30 days": "Vorige 30 dagen", "Previous 30 days": "Vorige 30 dagen",
"Previous 7 days": "Vorige 7 dagen", "Previous 7 days": "Vorige 7 dagen",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "ਸਧਾਰਨ ਪਾਠ (.txt)", "Plain text (.txt)": "ਸਧਾਰਨ ਪਾਠ (.txt)",
"Playground": "ਖੇਡ ਦਾ ਮੈਦਾਨ", "Playground": "ਖੇਡ ਦਾ ਮੈਦਾਨ",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "ਸਕਾਰਾਤਮਕ ਰਵੱਈਆ", "Positive attitude": "ਸਕਾਰਾਤਮਕ ਰਵੱਈਆ",
"Previous 30 days": "ਪਿਛਲੇ 30 ਦਿਨ", "Previous 30 days": "ਪਿਛਲੇ 30 ਦਿਨ",
"Previous 7 days": "ਪਿਛਲੇ 7 ਦਿਨ", "Previous 7 days": "ਪਿਛਲੇ 7 ਦਿਨ",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Zwykły tekst (.txt)", "Plain text (.txt)": "Zwykły tekst (.txt)",
"Playground": "Plac zabaw", "Playground": "Plac zabaw",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "Pozytywne podejście", "Positive attitude": "Pozytywne podejście",
"Previous 30 days": "Poprzednie 30 dni", "Previous 30 days": "Poprzednie 30 dni",
"Previous 7 days": "Poprzednie 7 dni", "Previous 7 days": "Poprzednie 7 dni",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Texto simples (.txt)", "Plain text (.txt)": "Texto simples (.txt)",
"Playground": "Playground", "Playground": "Playground",
"Please carefully review the following warnings:": "Por favor, revise cuidadosamente os seguintes avisos:", "Please carefully review the following warnings:": "Por favor, revise cuidadosamente os seguintes avisos:",
"Please select a reason": "",
"Positive attitude": "Atitude positiva", "Positive attitude": "Atitude positiva",
"Previous 30 days": "Últimos 30 dias", "Previous 30 days": "Últimos 30 dias",
"Previous 7 days": "Últimos 7 dias", "Previous 7 days": "Últimos 7 dias",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Texto sem formatação (.txt)", "Plain text (.txt)": "Texto sem formatação (.txt)",
"Playground": "Recreio", "Playground": "Recreio",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "Atitude Positiva", "Positive attitude": "Atitude Positiva",
"Previous 30 days": "Últimos 30 dias", "Previous 30 days": "Últimos 30 dias",
"Previous 7 days": "Últimos 7 dias", "Previous 7 days": "Últimos 7 dias",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Text simplu (.txt)", "Plain text (.txt)": "Text simplu (.txt)",
"Playground": "Teren de Joacă", "Playground": "Teren de Joacă",
"Please carefully review the following warnings:": "Vă rugăm să revizuiți cu atenție următoarele avertismente:", "Please carefully review the following warnings:": "Vă rugăm să revizuiți cu atenție următoarele avertismente:",
"Please select a reason": "",
"Positive attitude": "Atitudine pozitivă", "Positive attitude": "Atitudine pozitivă",
"Previous 30 days": "Ultimele 30 de zile", "Previous 30 days": "Ultimele 30 de zile",
"Previous 7 days": "Ultimele 7 zile", "Previous 7 days": "Ultimele 7 zile",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Текст в формате .txt", "Plain text (.txt)": "Текст в формате .txt",
"Playground": "Песочница", "Playground": "Песочница",
"Please carefully review the following warnings:": "Пожалуйста, внимательно ознакомьтесь со следующими предупреждениями:", "Please carefully review the following warnings:": "Пожалуйста, внимательно ознакомьтесь со следующими предупреждениями:",
"Please select a reason": "",
"Positive attitude": "Позитивный настрой", "Positive attitude": "Позитивный настрой",
"Previous 30 days": "Предыдущие 30 дней", "Previous 30 days": "Предыдущие 30 дней",
"Previous 7 days": "Предыдущие 7 дней", "Previous 7 days": "Предыдущие 7 дней",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Обичан текст (.txt)", "Plain text (.txt)": "Обичан текст (.txt)",
"Playground": "Игралиште", "Playground": "Игралиште",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "Позитиван став", "Positive attitude": "Позитиван став",
"Previous 30 days": "Претходних 30 дана", "Previous 30 days": "Претходних 30 дана",
"Previous 7 days": "Претходних 7 дана", "Previous 7 days": "Претходних 7 дана",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Text (.txt)", "Plain text (.txt)": "Text (.txt)",
"Playground": "Lekplats", "Playground": "Lekplats",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "Positivt inställning", "Positive attitude": "Positivt inställning",
"Previous 30 days": "Föregående 30 dagar", "Previous 30 days": "Föregående 30 dagar",
"Previous 7 days": "Föregående 7 dagar", "Previous 7 days": "Föregående 7 dagar",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "ไฟล์ข้อความ (.txt)", "Plain text (.txt)": "ไฟล์ข้อความ (.txt)",
"Playground": "สนามทดสอบ", "Playground": "สนามทดสอบ",
"Please carefully review the following warnings:": "โปรดตรวจสอบคำเตือนต่อไปนี้อย่างละเอียด:", "Please carefully review the following warnings:": "โปรดตรวจสอบคำเตือนต่อไปนี้อย่างละเอียด:",
"Please select a reason": "",
"Positive attitude": "ทัศนคติด้านบวก", "Positive attitude": "ทัศนคติด้านบวก",
"Previous 30 days": "30 วันที่ผ่านมา", "Previous 30 days": "30 วันที่ผ่านมา",
"Previous 7 days": "7 วันที่ผ่านมา", "Previous 7 days": "7 วันที่ผ่านมา",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "", "Plain text (.txt)": "",
"Playground": "", "Playground": "",
"Please carefully review the following warnings:": "", "Please carefully review the following warnings:": "",
"Please select a reason": "",
"Positive attitude": "", "Positive attitude": "",
"Previous 30 days": "", "Previous 30 days": "",
"Previous 7 days": "", "Previous 7 days": "",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Düz metin (.txt)", "Plain text (.txt)": "Düz metin (.txt)",
"Playground": "Oyun Alanı", "Playground": "Oyun Alanı",
"Please carefully review the following warnings:": "Lütfen aşağıdaki uyarıları dikkatlice inceleyin:", "Please carefully review the following warnings:": "Lütfen aşağıdaki uyarıları dikkatlice inceleyin:",
"Please select a reason": "",
"Positive attitude": "Olumlu yaklaşım", "Positive attitude": "Olumlu yaklaşım",
"Previous 30 days": "Önceki 30 gün", "Previous 30 days": "Önceki 30 gün",
"Previous 7 days": "Önceki 7 gün", "Previous 7 days": "Önceki 7 gün",
+18 -17
View File
@@ -9,7 +9,7 @@
"{{user}}'s Chats": "Чати {{user}}а", "{{user}}'s Chats": "Чати {{user}}а",
"{{webUIName}} Backend Required": "Необхідно підключення бекенду {{webUIName}}", "{{webUIName}} Backend Required": "Необхідно підключення бекенду {{webUIName}}",
"*Prompt node ID(s) are required for image generation": "*Для генерації зображення потрібно вказати ідентифікатор(и) вузла(ів)", "*Prompt node ID(s) are required for image generation": "*Для генерації зображення потрібно вказати ідентифікатор(и) вузла(ів)",
"A new version (v{{LATEST_VERSION}}) is now available.": "", "A new version (v{{LATEST_VERSION}}) is now available.": "Нова версія (в{{LATEST_VERSION}}) зараз доступна.",
"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": "користувача", "a user": "користувача",
"About": "Про програму", "About": "Про програму",
@@ -74,10 +74,10 @@
"AUTOMATIC1111 Api Auth String": "AUTOMATIC1111 Рядок авторизації API", "AUTOMATIC1111 Api Auth String": "AUTOMATIC1111 Рядок авторизації API",
"AUTOMATIC1111 Base URL": "URL-адреса AUTOMATIC1111", "AUTOMATIC1111 Base URL": "URL-адреса AUTOMATIC1111",
"AUTOMATIC1111 Base URL is required.": "Необхідна URL-адреса AUTOMATIC1111.", "AUTOMATIC1111 Base URL is required.": "Необхідна URL-адреса AUTOMATIC1111.",
"Available list": "", "Available list": "Список доступності",
"available!": "доступно!", "available!": "доступно!",
"Azure AI Speech": "", "Azure AI Speech": "Мовлення Azure AI",
"Azure Region": "", "Azure Region": "Регіон Azure",
"Back": "Назад", "Back": "Назад",
"Bad Response": "Неправильна відповідь", "Bad Response": "Неправильна відповідь",
"Banners": "Прапори", "Banners": "Прапори",
@@ -98,7 +98,7 @@
"Chat Bubble UI": "Чат у вигляді бульбашок", "Chat Bubble UI": "Чат у вигляді бульбашок",
"Chat Controls": "Керування чатом", "Chat Controls": "Керування чатом",
"Chat direction": "Напрям чату", "Chat direction": "Напрям чату",
"Chat Overview": "", "Chat Overview": "Огляд чату",
"Chats": "Чати", "Chats": "Чати",
"Check Again": "Перевірити ще раз", "Check Again": "Перевірити ще раз",
"Check for updates": "Перевірити оновлення", "Check for updates": "Перевірити оновлення",
@@ -416,8 +416,8 @@
"Model {{modelId}} not found": "Модель {{modelId}} не знайдено", "Model {{modelId}} not found": "Модель {{modelId}} не знайдено",
"Model {{modelName}} is not vision capable": "Модель {{modelName}} не здатна бачити", "Model {{modelName}} is not vision capable": "Модель {{modelName}} не здатна бачити",
"Model {{name}} is now {{status}}": "Модель {{name}} тепер має {{status}}", "Model {{name}} is now {{status}}": "Модель {{name}} тепер має {{status}}",
"Model {{name}} is now at the top": "", "Model {{name}} is now at the top": "Модель {{name}} тепер на першому місці",
"Model accepts image inputs": "", "Model accepts image inputs": "Модель приймає зображеня",
"Model created successfully!": "Модель створено успішно!", "Model created successfully!": "Модель створено успішно!",
"Model filesystem path detected. Model shortname is required for update, cannot continue.": "Виявлено шлях до файлової системи моделі. Для оновлення потрібно вказати коротке ім'я моделі, не вдасться продовжити.", "Model filesystem path detected. Model shortname is required for update, cannot continue.": "Виявлено шлях до файлової системи моделі. Для оновлення потрібно вказати коротке ім'я моделі, не вдасться продовжити.",
"Model ID": "ID моделі", "Model ID": "ID моделі",
@@ -429,7 +429,7 @@
"Modelfile Content": "Вміст файлу моделі", "Modelfile Content": "Вміст файлу моделі",
"Models": "Моделі", "Models": "Моделі",
"More": "Більше", "More": "Більше",
"Move to Top": "", "Move to Top": "Перейти до початку",
"Name": "Ім'я", "Name": "Ім'я",
"Name Tag": "Назва тегу", "Name Tag": "Назва тегу",
"Name your model": "Назвіть свою модель", "Name your model": "Назвіть свою модель",
@@ -466,7 +466,7 @@
"Oops! Looks like the URL is invalid. Please double-check and try again.": "Упс! Схоже, що URL-адреса невірна. Будь ласка, перевірте ще раз та спробуйте ще раз.", "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! 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 з бекенду.", "Oops! You're using an unsupported method (frontend only). Please serve the WebUI from the backend.": "Упс! Ви використовуєте непідтримуваний метод (тільки для фронтенду). Будь ласка, обслуговуйте WebUI з бекенду.",
"Open file": "", "Open file": "Відкрити файл",
"Open new chat": "Відкрити новий чат", "Open new chat": "Відкрити новий чат",
"Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open WebUI версія (v{{OPEN_WEBUI_VERSION}}) нижча за необхідну версію (v{{REQUIRED_VERSION}})", "Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})": "Open WebUI версія (v{{OPEN_WEBUI_VERSION}}) нижча за необхідну версію (v{{REQUIRED_VERSION}})",
"OpenAI": "OpenAI", "OpenAI": "OpenAI",
@@ -476,9 +476,9 @@
"OpenAI URL/Key required.": "Потрібен OpenAI URL/ключ.", "OpenAI URL/Key required.": "Потрібен OpenAI URL/ключ.",
"or": "або", "or": "або",
"Other": "Інше", "Other": "Інше",
"Output format": "", "Output format": "Формат відповіді",
"Overview": "", "Overview": "Огляд",
"page": "", "page": "сторінка",
"Password": "Пароль", "Password": "Пароль",
"PDF document (.pdf)": "PDF документ (.pdf)", "PDF document (.pdf)": "PDF документ (.pdf)",
"PDF Extract Images (OCR)": "Розпізнавання зображень з PDF (OCR)", "PDF Extract Images (OCR)": "Розпізнавання зображень з PDF (OCR)",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Простий текст (.txt)", "Plain text (.txt)": "Простий текст (.txt)",
"Playground": "Майданчик", "Playground": "Майданчик",
"Please carefully review the following warnings:": "Будь ласка, уважно ознайомтеся з наступними попередженнями:", "Please carefully review the following warnings:": "Будь ласка, уважно ознайомтеся з наступними попередженнями:",
"Please select a reason": "",
"Positive attitude": "Позитивне ставлення", "Positive attitude": "Позитивне ставлення",
"Previous 30 days": "Попередні 30 днів", "Previous 30 days": "Попередні 30 днів",
"Previous 7 days": "Попередні 7 днів", "Previous 7 days": "Попередні 7 днів",
@@ -541,7 +542,7 @@
"Save": "Зберегти", "Save": "Зберегти",
"Save & Create": "Зберегти та створити", "Save & Create": "Зберегти та створити",
"Save & Update": "Зберегти та оновити", "Save & Update": "Зберегти та оновити",
"Save As Copy": "", "Save As Copy": "Зберегти як копію",
"Save Tag": "Зберегти тег", "Save Tag": "Зберегти тег",
"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": "Збереження журналів чату безпосередньо в сховище вашого браузера більше не підтримується. Будь ласка, завантажте та видаліть журнали чату, натиснувши кнопку нижче. Не хвилюйтеся, ви можете легко повторно імпортувати журнали чату до бекенду через", "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": "Сканування",
@@ -586,7 +587,7 @@
"Send": "Надіслати", "Send": "Надіслати",
"Send a Message": "Надіслати повідомлення", "Send a Message": "Надіслати повідомлення",
"Send message": "Надіслати повідомлення", "Send message": "Надіслати повідомлення",
"Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "", "Sends `stream_options: { include_usage: true }` in the request.\nSupported providers will return token usage information in the response when set.": "Відправляє `stream_options: { include_usage: true }` у запиті.\nПідтримувані постачальники повернуть інформацію про використання токену у відповіді, якщо вона встановлена.",
"September": "Вересень", "September": "Вересень",
"Serper API Key": "Ключ API Serper", "Serper API Key": "Ключ API Serper",
"Serply API Key": "Ключ API Serply", "Serply API Key": "Ключ API Serply",
@@ -620,11 +621,11 @@
"Sign up": "Зареєструватися", "Sign up": "Зареєструватися",
"Signing in": "Увійдіть в систему", "Signing in": "Увійдіть в систему",
"Source": "Джерело", "Source": "Джерело",
"Speech Playback Speed": "", "Speech Playback Speed": "Швидкість відтворення мовлення",
"Speech recognition error: {{error}}": "Помилка розпізнавання мови: {{error}}", "Speech recognition error: {{error}}": "Помилка розпізнавання мови: {{error}}",
"Speech-to-Text Engine": "Система розпізнавання мови", "Speech-to-Text Engine": "Система розпізнавання мови",
"Stop Sequence": "Символ зупинки", "Stop Sequence": "Символ зупинки",
"Stream Chat Response": "", "Stream Chat Response": "Відповідь стрім-чату",
"STT Model": "Модель STT ", "STT Model": "Модель STT ",
"STT Settings": "Налаштування STT", "STT Settings": "Налаштування STT",
"Submit": "Надіслати", "Submit": "Надіслати",
@@ -704,7 +705,7 @@
"Unpin": "Відчепити", "Unpin": "Відчепити",
"Update": "Оновлення", "Update": "Оновлення",
"Update and Copy Link": "Оновлення та копіювання посилання", "Update and Copy Link": "Оновлення та копіювання посилання",
"Update for the latest features and improvements.": "", "Update for the latest features and improvements.": "Оновіть програми для нових функцій та покращень.",
"Update password": "Оновити пароль", "Update password": "Оновити пароль",
"Updated at": "Оновлено на", "Updated at": "Оновлено на",
"Upload": "Завантажити", "Upload": "Завантажити",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "Văn bản thô (.txt)", "Plain text (.txt)": "Văn bản thô (.txt)",
"Playground": "Thử nghiệm (Playground)", "Playground": "Thử nghiệm (Playground)",
"Please carefully review the following warnings:": "Vui lòng xem xét cẩn thận các cảnh báo sau:", "Please carefully review the following warnings:": "Vui lòng xem xét cẩn thận các cảnh báo sau:",
"Please select a reason": "",
"Positive attitude": "Thái độ tích cực", "Positive attitude": "Thái độ tích cực",
"Previous 30 days": "30 ngày trước", "Previous 30 days": "30 ngày trước",
"Previous 7 days": "7 ngày trước", "Previous 7 days": "7 ngày trước",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "TXT 文档 (.txt)", "Plain text (.txt)": "TXT 文档 (.txt)",
"Playground": "AI 对话游乐场", "Playground": "AI 对话游乐场",
"Please carefully review the following warnings:": "请仔细阅读以下警告信息:", "Please carefully review the following warnings:": "请仔细阅读以下警告信息:",
"Please select a reason": "",
"Positive attitude": "积极的态度", "Positive attitude": "积极的态度",
"Previous 30 days": "过去 30 天", "Previous 30 days": "过去 30 天",
"Previous 7 days": "过去 7 天", "Previous 7 days": "过去 7 天",
@@ -497,6 +497,7 @@
"Plain text (.txt)": "純文字 (.txt)", "Plain text (.txt)": "純文字 (.txt)",
"Playground": "遊樂場", "Playground": "遊樂場",
"Please carefully review the following warnings:": "請仔細閱讀以下警告:", "Please carefully review the following warnings:": "請仔細閱讀以下警告:",
"Please select a reason": "",
"Positive attitude": "積極的態度", "Positive attitude": "積極的態度",
"Previous 30 days": "過去 30 天", "Previous 30 days": "過去 30 天",
"Previous 7 days": "過去 7 天", "Previous 7 days": "過去 7 天",
+2
View File
@@ -19,7 +19,9 @@ export const activeUserCount: Writable<null | number> = writable(null);
export const USAGE_POOL: Writable<null | string[]> = writable(null); export const USAGE_POOL: Writable<null | string[]> = writable(null);
export const theme = writable('system'); export const theme = writable('system');
export const chatId = writable(''); export const chatId = writable('');
export const chatTitle = writable('');
export const chats = writable([]); export const chats = writable([]);
export const pinnedChats = writable([]); export const pinnedChats = writable([]);
-18
View File
@@ -8,23 +8,6 @@ import { TTS_RESPONSE_SPLIT } from '$lib/types';
// Helper functions // Helper functions
////////////////////////// //////////////////////////
const convertLatexToSingleLine = (content) => {
// Patterns to match multiline LaTeX blocks
const patterns = [
/(\$\$\s[\s\S]*?\s\$\$)/g, // Match $$ ... $$
/(\\\[[\s\S]*?\\\])/g, // Match \[ ... \]
/(\\begin\{[a-z]+\}[\s\S]*?\\end\{[a-z]+\})/g // Match \begin{...} ... \end{...}
];
patterns.forEach((pattern) => {
content = content.replace(pattern, (match) => {
return match.replace(/\s*\n\s*/g, ' ').trim();
});
});
return content;
};
export const replaceTokens = (content, char, user) => { export const replaceTokens = (content, char, user) => {
const charToken = /{{char}}/gi; const charToken = /{{char}}/gi;
const userToken = /{{user}}/gi; const userToken = /{{user}}/gi;
@@ -68,7 +51,6 @@ export const sanitizeResponseContent = (content: string) => {
}; };
export const processResponseContent = (content: string) => { export const processResponseContent = (content: string) => {
content = convertLatexToSingleLine(content);
return content.trim(); return content.trim();
}; };
+91 -77
View File
@@ -1,14 +1,13 @@
import katex from 'katex'; import katex from 'katex';
const DELIMITER_LIST = [ const DELIMITER_LIST = [
{ left: '$$', right: '$$', display: false }, { left: '$$', right: '$$', display: true },
{ left: '$', right: '$', display: false }, { left: '$', right: '$', display: false },
{ left: '\\pu{', right: '}', display: false }, { left: '\\pu{', right: '}', display: false },
{ left: '\\ce{', right: '}', display: false }, { left: '\\ce{', right: '}', display: false },
{ left: '\\(', right: '\\)', display: false }, { left: '\\(', right: '\\)', display: false },
{ left: '( ', right: ' )', display: false },
{ left: '\\[', right: '\\]', display: true }, { left: '\\[', right: '\\]', display: true },
{ left: '[ ', right: ' ]', display: true } { left: '\\begin{equation}', right: '\\end{equation}', display: true }
]; ];
// const DELIMITER_LIST = [ // const DELIMITER_LIST = [
@@ -28,24 +27,27 @@ function escapeRegex(string) {
function generateRegexRules(delimiters) { function generateRegexRules(delimiters) {
delimiters.forEach((delimiter) => { delimiters.forEach((delimiter) => {
const { left, right } = delimiter; const { left, right, display } = delimiter;
// Ensure regex-safe delimiters // Ensure regex-safe delimiters
const escapedLeft = escapeRegex(left); const escapedLeft = escapeRegex(left);
const escapedRight = escapeRegex(right); const escapedRight = escapeRegex(right);
// Inline pattern - Capture group $1, token content, followed by end delimiter and normal punctuation marks. if (!display) {
// Example: $text$ // For inline delimiters, we match everyting
inlinePatterns.push( inlinePatterns.push(`${escapedLeft}((?:\\\\[^]|[^\\\\])+?)${escapedRight}`);
`${escapedLeft}((?:\\\\.|[^\\\\\\n])*?(?:\\\\.|[^\\\\\\n${escapedRight}]))${escapedRight}` } else {
); // Block delimiters doubles as inline delimiters when not followed by a newline
inlinePatterns.push(`${escapedLeft}(?!\\n)((?:\\\\[^]|[^\\\\])+?)(?!\\n)${escapedRight}`);
// Block pattern - Starts and ends with the delimiter on new lines. Example: blockPatterns.push(`${escapedLeft}\\n((?:\\\\[^]|[^\\\\])+?)\\n${escapedRight}`);
// $$\ncontent here\n$$ }
blockPatterns.push(`${escapedLeft}\n((?:\\\\[^]|[^\\\\])+?)\n${escapedRight}`);
}); });
const inlineRule = new RegExp(`^(${inlinePatterns.join('|')})(?=[\\s?!.,:?!。,:]|$)`, 'u'); // Math formulas can end in special characters
const blockRule = new RegExp(`^(${blockPatterns.join('|')})(?:\n|$)`, 'u'); const inlineRule = new RegExp(
`^(${inlinePatterns.join('|')})(?=[\\s?。,!-\/:-@[-\`{-~]|$)`,
'u'
);
const blockRule = new RegExp(`^(${blockPatterns.join('|')})(?=[\\s?。,!-\/:-@[-\`{-~]|$)`, 'u');
return { inlineRule, blockRule }; return { inlineRule, blockRule };
} }
@@ -54,85 +56,97 @@ const { inlineRule, blockRule } = generateRegexRules(DELIMITER_LIST);
export default function (options = {}) { export default function (options = {}) {
return { return {
extensions: [ extensions: [inlineKatex(options), blockKatex(options)]
inlineKatex(options, createRenderer(options, false)),
blockKatex(options, createRenderer(options, true))
]
}; };
} }
function createRenderer(options, newlineAfter) { function katexStart(src, displayMode: boolean) {
return (token) => let ruleReg = displayMode ? blockRule : inlineRule;
katex.renderToString(token.text, { ...options, displayMode: token.displayMode }) +
(newlineAfter ? '\n' : ''); let indexSrc = src;
while (indexSrc) {
let index = -1;
let startIndex = -1;
let startDelimiter = '';
let endDelimiter = '';
for (let delimiter of DELIMITER_LIST) {
if (delimiter.display !== displayMode) {
continue;
}
startIndex = indexSrc.indexOf(delimiter.left);
if (startIndex === -1) {
continue;
}
index = startIndex;
startDelimiter = delimiter.left;
endDelimiter = delimiter.right;
}
if (index === -1) {
return;
}
// Check if the delimiter is preceded by a special character.
// If it does, then it's potentially a math formula.
const f = index === 0 || indexSrc.charAt(index - 1).match(/[\s?。,!-\/:-@[-`{-~]/);
if (f) {
const possibleKatex = indexSrc.substring(index);
if (possibleKatex.match(ruleReg)) {
return index;
}
}
indexSrc = indexSrc.substring(index + startDelimiter.length).replace(endDelimiter, '');
}
} }
function inlineKatex(options, renderer) { function katexTokenizer(src, tokens, displayMode: boolean) {
const ruleReg = inlineRule; let ruleReg = displayMode ? blockRule : inlineRule;
let type = displayMode ? 'blockKatex' : 'inlineKatex';
const match = src.match(ruleReg);
if (match) {
const text = match
.slice(2)
.filter((item) => item)
.find((item) => item.trim());
return {
type,
raw: match[0],
text: text,
displayMode
};
}
}
function inlineKatex(options) {
return { return {
name: 'inlineKatex', name: 'inlineKatex',
level: 'inline', level: 'inline',
start(src) { start(src) {
let index; return katexStart(src, false);
let indexSrc = src;
while (indexSrc) {
index = indexSrc.indexOf('$');
if (index === -1) {
return;
}
const f = index === 0 || indexSrc.charAt(index - 1) === ' ';
if (f) {
const possibleKatex = indexSrc.substring(index);
if (possibleKatex.match(ruleReg)) {
return index;
}
}
indexSrc = indexSrc.substring(index + 1).replace(/^\$+/, '');
}
}, },
tokenizer(src, tokens) { tokenizer(src, tokens) {
const match = src.match(ruleReg); return katexTokenizer(src, tokens, false);
}
if (match) {
const text = match
.slice(2)
.filter((item) => item)
.find((item) => item.trim());
return {
type: 'inlineKatex',
raw: match[0],
text: text
};
}
},
renderer
}; };
} }
function blockKatex(options, renderer) { function blockKatex(options) {
return { return {
name: 'blockKatex', name: 'blockKatex',
level: 'block', level: 'block',
tokenizer(src, tokens) { start(src) {
const match = src.match(blockRule); return katexStart(src, true);
if (match) {
const text = match
.slice(2)
.filter((item) => item)
.find((item) => item.trim());
return {
type: 'blockKatex',
raw: match[0],
text: text
};
}
}, },
renderer tokenizer(src, tokens) {
return katexTokenizer(src, tokens, true);
}
}; };
} }
+22 -13
View File
@@ -46,6 +46,7 @@
import { compareVersion } from '$lib/utils'; import { compareVersion } from '$lib/utils';
import UpdateInfoToast from '$lib/components/layout/UpdateInfoToast.svelte'; import UpdateInfoToast from '$lib/components/layout/UpdateInfoToast.svelte';
import { fade } from 'svelte/transition';
const i18n = getContext('i18n'); const i18n = getContext('i18n');
@@ -53,6 +54,8 @@
let DB = null; let DB = null;
let localDBChats = []; let localDBChats = [];
let version;
const getModels = async () => { const getModels = async () => {
return _getModels(localStorage.token); return _getModels(localStorage.token);
}; };
@@ -195,10 +198,20 @@
temporaryChatEnabled.set(true); temporaryChatEnabled.set(true);
} }
// Check for version updates
if ($user.role === 'admin') { if ($user.role === 'admin') {
checkForVersionUpdates(); // Check if the user has dismissed the update toast in the last 24 hours
} if (localStorage.dismissedUpdateToast) {
const dismissedUpdateToast = new Date(Number(localStorage.dismissedUpdateToast));
const now = new Date();
if (now - dismissedUpdateToast > 24 * 60 * 60 * 1000) {
await checkForVersionUpdates();
}
} else {
await checkForVersionUpdates();
}
}
await tick(); await tick();
} }
@@ -206,28 +219,24 @@
}); });
const checkForVersionUpdates = async () => { const checkForVersionUpdates = async () => {
const version = await getVersionUpdates(localStorage.token).catch((error) => { version = await getVersionUpdates(localStorage.token).catch((error) => {
return { return {
current: WEBUI_VERSION, current: WEBUI_VERSION,
latest: WEBUI_VERSION latest: WEBUI_VERSION
}; };
}); });
if (compareVersion(version.latest, version.current)) {
toast.custom(UpdateInfoToast, {
duration: Number.POSITIVE_INFINITY,
position: 'bottom-right',
componentProps: {
version
}
});
}
}; };
</script> </script>
<SettingsModal bind:show={$showSettings} /> <SettingsModal bind:show={$showSettings} />
<ChangelogModal bind:show={$showChangelog} /> <ChangelogModal bind:show={$showChangelog} />
{#if version && compareVersion(version.latest, version.current)}
<div class=" absolute bottom-8 right-8 z-50" in:fade={{ duration: 100 }}>
<UpdateInfoToast {version} />
</div>
{/if}
<div class="app relative"> <div class="app relative">
<div <div
class=" text-gray-700 dark:text-gray-100 bg-white dark:bg-gray-900 h-screen max-h-[100dvh] overflow-auto flex flex-row" class=" text-gray-700 dark:text-gray-100 bg-white dark:bg-gray-900 h-screen max-h-[100dvh] overflow-auto flex flex-row"
Generated
+329 -13
View File
@@ -321,6 +321,44 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl", hash = "sha256:5dae8d4d79b552a71cbabc7deb25dfe8ce710b17ff41711e13010ead2abfc3e5", size = 32764 }, { url = "https://files.pythonhosted.org/packages/99/37/e8730c3587a65eb5645d4aba2d27aae48e8003614d6aaf15dda67f702f1f/bidict-0.23.1-py3-none-any.whl", hash = "sha256:5dae8d4d79b552a71cbabc7deb25dfe8ce710b17ff41711e13010ead2abfc3e5", size = 32764 },
] ]
[[package]]
name = "bitarray"
version = "2.9.2"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/c7/bf/25cf92a83e1fe4948d7935ae3c02f4c9ff9cb9c13e977fba8af11a5f642c/bitarray-2.9.2.tar.gz", hash = "sha256:a8f286a51a32323715d77755ed959f94bef13972e9a2fe71b609e40e6d27957e", size = 132825 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/32/86/a02960105c0a40e7e4cbc74933f070ab476312d20aa25f6959f4abe5095b/bitarray-2.9.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fe71fd4b76380c2772f96f1e53a524da7063645d647a4fcd3b651bdd80ca0f2e", size = 177175 },
{ url = "https://files.pythonhosted.org/packages/8d/fd/ce16db75d5470f9676089428500ef0d473f4e2ff1dcbcf1f856bcd351ea2/bitarray-2.9.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d527172919cdea1e13994a66d9708a80c3d33dedcf2f0548e4925e600fef3a3a", size = 128273 },
{ url = "https://files.pythonhosted.org/packages/06/60/c1a419f8abd0c9d2641e3e570fc63ad3a87a63ef88a362900e3254f780bc/bitarray-2.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:052c5073bdcaa9dd10628d99d37a2f33ec09364b86dd1f6281e2d9f8d3db3060", size = 124642 },
{ url = "https://files.pythonhosted.org/packages/9e/af/bba89e6f9499fb9dba04b701c8106a1dcc94b5913f35ed20f089da8bea99/bitarray-2.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e064caa55a6ed493aca1eda06f8b3f689778bc780a75e6ad7724642ba5dc62f7", size = 296283 },
{ url = "https://files.pythonhosted.org/packages/8f/44/19e91ffc42a2ded4f1ee73f7923186cf1606cab1119b1d5df24c9cea763e/bitarray-2.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:508069a04f658210fdeee85a7a0ca84db4bcc110cbb1d21f692caa13210f24a7", size = 311309 },
{ url = "https://files.pythonhosted.org/packages/9f/76/eedaa1fcb60af30536af70f6659e3a86dcfdce3e413b188f7864513e4923/bitarray-2.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4da73ebd537d75fa7bccfc2228fcaedea0803f21dd9d0bf0d3b67fef3c4af294", size = 314220 },
{ url = "https://files.pythonhosted.org/packages/21/fa/9fb7266b28ce1c8778aaea650c75855640ea1ada91a80c47c90376994a59/bitarray-2.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5cb378eaa65cd43098f11ff5d27e48ee3b956d2c00d2d6b5bfc2a09fe183be47", size = 296519 },
{ url = "https://files.pythonhosted.org/packages/c4/ee/c9a92c123f9b0438498d0a8f9470439a43bdafbf042cbdceab7968e5bb1c/bitarray-2.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d14c790b91f6cbcd9b718f88ed737c78939980c69ac8c7f03dd7e60040c12951", size = 286784 },
{ url = "https://files.pythonhosted.org/packages/81/7f/0d9c16a7e321f5cb1d6c634acf4f8620513634776ceeee6f8f732b992fae/bitarray-2.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7eea9318293bc0ea6447e9ebfba600a62f3428bea7e9c6d42170ae4f481dbab3", size = 328319 },
{ url = "https://files.pythonhosted.org/packages/2e/98/0730518cf071366633dd027e14e3fba91dc91dd8b4e60d6ae249cde3f53f/bitarray-2.9.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b76ffec27c7450b8a334f967366a9ebadaea66ee43f5b530c12861b1a991f503", size = 315614 },
{ url = "https://files.pythonhosted.org/packages/4c/b3/8f198444cd2312d520e0372f933932fff68b5900eb2dbab91725924aa7a1/bitarray-2.9.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:76b76a07d4ee611405045c6950a1e24c4362b6b44808d4ad6eea75e0dbc59af4", size = 340143 },
{ url = "https://files.pythonhosted.org/packages/b9/1a/78841fa855ea2dc13d8d61f231bd3a619732738d7d840b4b35d9d8f93e6e/bitarray-2.9.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:c7d16beeaaab15b075990cd26963d6b5b22e8c5becd131781514a00b8bdd04bd", size = 345958 },
{ url = "https://files.pythonhosted.org/packages/b7/9f/aac87cd45cc4d7b7e50dde590327bde525601088e710c8ba00e8743ddb2b/bitarray-2.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60df43e868a615c7e15117a1e1c2e5e11f48f6457280eba6ddf8fbefbec7da99", size = 327122 },
{ url = "https://files.pythonhosted.org/packages/78/3e/5df523037f80cf95f99d0155ec921298f4fa2b1f7be10cb0c4daffb632da/bitarray-2.9.2-cp311-cp311-win32.whl", hash = "sha256:e788608ed7767b7b3bbde6d49058bccdf94df0de9ca75d13aa99020cc7e68095", size = 118627 },
{ url = "https://files.pythonhosted.org/packages/9c/0e/af070131ed7a4fd15cadc84e018d3c6d3b58070513934462b48a5ff9eb1e/bitarray-2.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:a23397da092ef0a8cfe729571da64c2fc30ac18243caa82ac7c4f965087506ff", size = 126013 },
{ url = "https://files.pythonhosted.org/packages/ef/7d/f489f2136cf5ea1af201be12d55bfc57b45731c4b7e3cc6e001efe62effb/bitarray-2.9.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:90e3a281ffe3897991091b7c46fca38c2675bfd4399ffe79dfeded6c52715436", size = 176636 },
{ url = "https://files.pythonhosted.org/packages/b8/b6/3e64b19e45b52837e0c4ec1c220bf24dd70dcbcd27e073e07837973f8c16/bitarray-2.9.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bed637b674db5e6c8a97a4a321e3e4d73e72d50b5c6b29950008a93069cc64cd", size = 127916 },
{ url = "https://files.pythonhosted.org/packages/23/c7/12b1e5cdd8678a6a47610a013fafdbe80d62226d49b73185619bd7361c53/bitarray-2.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e49066d251dbbe4e6e3a5c3937d85b589e40e2669ad0eef41a00f82ec17d844b", size = 124475 },
{ url = "https://files.pythonhosted.org/packages/77/e1/02dc3f03348808a77b26556a6c299f68dbbf0c4a27f340a69d574d2d2432/bitarray-2.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c4344e96642e2211fb3a50558feff682c31563a4c64529a931769d40832ca79", size = 299121 },
{ url = "https://files.pythonhosted.org/packages/ea/f1/9cdb006c352b47b26532e7ee7798bd2dacf42774eb75e4a353a38a3ff2b3/bitarray-2.9.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aeb60962ec4813c539a59fbd4f383509c7222b62c3fb1faa76b54943a613e33a", size = 313486 },
{ url = "https://files.pythonhosted.org/packages/bb/79/98bdfea0f390d313fa04546578a3eee3c3a6dbba94973246438ea8c880aa/bitarray-2.9.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed0f7982f10581bb16553719e5e8f933e003f5b22f7d25a68bdb30fac630a6ff", size = 317527 },
{ url = "https://files.pythonhosted.org/packages/58/02/21a2038ee856649f03738828e3bc6c4cd9bfd31125a250c6e30d378067ff/bitarray-2.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c71d1cabdeee0cdda4669168618f0e46b7dace207b29da7b63aaa1adc2b54081", size = 299885 },
{ url = "https://files.pythonhosted.org/packages/49/97/82c350256a22689fb50ed86af1a3a5509410332cfe55d644fd7ff5e46dbf/bitarray-2.9.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0ef2d0a6f1502d38d911d25609b44c6cc27bee0a4363dd295df78b075041b60", size = 289796 },
{ url = "https://files.pythonhosted.org/packages/09/69/ca799419b576d015331b19b42c70086b1208ba363f744c8bb7dc31a0bb6a/bitarray-2.9.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6f71d92f533770fb027388b35b6e11988ab89242b883f48a6fe7202d238c61f8", size = 334912 },
{ url = "https://files.pythonhosted.org/packages/fb/8a/dad9d48c72367f76b117957e3d718de07254667f33838d061856b238b576/bitarray-2.9.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:ba0734aa300757c924f3faf8148e1b8c247176a0ac8e16aefdf9c1eb19e868f7", size = 322790 },
{ url = "https://files.pythonhosted.org/packages/b7/f1/a4f723153e6b4c56a90275a1d6ad04860bd72d9966196eb331cd18b50a12/bitarray-2.9.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:d91406f413ccbf4af6ab5ae7bc78f772a95609f9ddd14123db36ef8c37116d95", size = 346212 },
{ url = "https://files.pythonhosted.org/packages/7f/4f/55301544e90df8a7b798959bffa94e5694b29c964ed9e9e2a52d6cfac9c7/bitarray-2.9.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:87abb7f80c0a042f3fe8e5264da1a2756267450bb602110d5327b8eaff7682e7", size = 353044 },
{ url = "https://files.pythonhosted.org/packages/16/8b/363fdc21aff37ac99dba4ed41c0d535c37b416cd002351a9848173c738f1/bitarray-2.9.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b558ce85579b51a2e38703877d1e93b7728a7af664dd45a34e833534f0b755d", size = 334380 },
{ url = "https://files.pythonhosted.org/packages/66/58/f57a6420b363d2f0517d79b9af9fd608360ef174eb5d1d82cc5a26dbdbde/bitarray-2.9.2-cp312-cp312-win32.whl", hash = "sha256:dac2399ee2889fbdd3472bfc2ede74c34cceb1ccf29a339964281a16eb1d3188", size = 118738 },
{ url = "https://files.pythonhosted.org/packages/93/a9/b9462e2a3b4ee020c6caa1dccece324d6b0c7643b9f0a43d9ac8cd15c9d9/bitarray-2.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:48a30d718d1a6dfc22a49547450107abe8f4afdf2abdcbe76eb9ed88edc49498", size = 126202 },
]
[[package]] [[package]]
name = "black" name = "black"
version = "24.8.0" version = "24.8.0"
@@ -577,6 +615,27 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", size = 97941 }, { url = "https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", size = 97941 },
] ]
[[package]]
name = "colbert-ai"
version = "0.2.21"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "bitarray" },
{ name = "datasets" },
{ name = "flask" },
{ name = "git-python" },
{ name = "ninja" },
{ name = "python-dotenv" },
{ name = "scipy" },
{ name = "tqdm" },
{ name = "transformers" },
{ name = "ujson" },
]
sdist = { url = "https://files.pythonhosted.org/packages/bc/dc/7edb06e3bb01326610ecfdfc8e396c6867ba7de6e58cda2356a604419899/colbert_ai-0.2.21.tar.gz", hash = "sha256:a8d6fdb4e2272f2b08ed37f8e5096072160d8415d1e40585751898b77e625bab", size = 87978 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/8d/9c/5d847be0f05e5266880fb1c183e642a6c34cd6a101c1d6219dfa74887543/colbert_ai-0.2.21-py3-none-any.whl", hash = "sha256:8c17e7be44e7f3989f2067f1176af4f65f4612d62850586657e8afb8314cb2a6", size = 116142 },
]
[[package]] [[package]]
name = "colorama" name = "colorama"
version = "0.4.6" version = "0.4.6"
@@ -677,6 +736,31 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/c3/be/d0d44e092656fe7a06b55e6103cbce807cdbdee17884a5367c68c9860853/dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a", size = 28686 }, { url = "https://files.pythonhosted.org/packages/c3/be/d0d44e092656fe7a06b55e6103cbce807cdbdee17884a5367c68c9860853/dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a", size = 28686 },
] ]
[[package]]
name = "datasets"
version = "3.0.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "aiohttp" },
{ name = "dill" },
{ name = "filelock" },
{ name = "fsspec", extra = ["http"] },
{ name = "huggingface-hub" },
{ name = "multiprocess" },
{ name = "numpy" },
{ name = "packaging" },
{ name = "pandas" },
{ name = "pyarrow" },
{ name = "pyyaml" },
{ name = "requests" },
{ name = "tqdm" },
{ name = "xxhash" },
]
sdist = { url = "https://files.pythonhosted.org/packages/c8/93/38c0d3c74b5932c4bb7596888c3d3b20adfd563e56552f437f8f57e6377b/datasets-3.0.0.tar.gz", hash = "sha256:592317eb137f0fc5aac068ff283ba13c3c66d10c9c034d44bc8aa584126cf3e2", size = 1876827 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/a5/52/45dab187f03d48c765b94db0464f5c10431756e47ae4cc6a8029a7d57a36/datasets-3.0.0-py3-none-any.whl", hash = "sha256:c23fefb6c953dcb1cd5f6deb6c502729c733ef98791e0c3f2d80c7ca2d9a01dd", size = 474265 },
]
[[package]] [[package]]
name = "deepdiff" name = "deepdiff"
version = "7.0.1" version = "7.0.1"
@@ -710,6 +794,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/20/8d/778b7d51b981a96554f29136cd59ca7880bf58094338085bcf2a979a0e6a/Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c", size = 9561 }, { url = "https://files.pythonhosted.org/packages/20/8d/778b7d51b981a96554f29136cd59ca7880bf58094338085bcf2a979a0e6a/Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c", size = 9561 },
] ]
[[package]]
name = "dill"
version = "0.3.8"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/17/4d/ac7ffa80c69ea1df30a8aa11b3578692a5118e7cd1aa157e3ef73b092d15/dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca", size = 184847 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/c9/7a/cef76fd8438a42f96db64ddaa85280485a9c395e7df3db8158cfec1eee34/dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7", size = 116252 },
]
[[package]] [[package]]
name = "distro" name = "distro"
version = "1.9.0" version = "1.9.0"
@@ -750,15 +843,15 @@ sdist = { url = "https://files.pythonhosted.org/packages/7d/7d/60ee3f2b16d9bfdfa
[[package]] [[package]]
name = "duckduckgo-search" name = "duckduckgo-search"
version = "6.2.11" version = "6.2.13"
source = { registry = "https://pypi.org/simple" } source = { registry = "https://pypi.org/simple" }
dependencies = [ dependencies = [
{ name = "click" }, { name = "click" },
{ name = "primp" }, { name = "primp" },
] ]
sdist = { url = "https://files.pythonhosted.org/packages/11/04/c76cd009653ace8d6a4a2a3d7851f5379911091d5d2104eef4bcb4c46c14/duckduckgo_search-6.2.11.tar.gz", hash = "sha256:6b6ef1b552c5e67f23e252025d2504caf6f9fc14f70e86c6dd512200f386c673", size = 32998 } sdist = { url = "https://files.pythonhosted.org/packages/55/2e/fe93c096b2b2bfcbd0a4f3a1de47d9a1c4b0dd4c7573d9f6c2b5c80ce6dc/duckduckgo_search-6.2.13.tar.gz", hash = "sha256:f89a9782f0f47d18c01a761c83453d0aef7a4335d1b6466fc47709652d5ca791", size = 33075 }
wheels = [ wheels = [
{ url = "https://files.pythonhosted.org/packages/f5/67/b1eb59a859717043b605eb16d4f3afe46ec3614804ac0fbe594339667866/duckduckgo_search-6.2.11-py3-none-any.whl", hash = "sha256:6fb7069b79e8928f487001de6859034ade19201bdcd257ec198802430e374bfe", size = 27429 }, { url = "https://files.pythonhosted.org/packages/e2/07/c0a6d0b1192790364ee9cf655c72c47ad13d68971570f19401f220cac50d/duckduckgo_search-6.2.13-py3-none-any.whl", hash = "sha256:a6618fb2744fa1d081b1bf2e47ef8051de993276a15c20f4e879a150726472de", size = 27468 },
] ]
[[package]] [[package]]
@@ -790,6 +883,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/00/e7/ed3243b30d1bec41675b6394a1daae46349dc2b855cb83be846a5a918238/ecdsa-0.19.0-py2.py3-none-any.whl", hash = "sha256:2cea9b88407fdac7bbeca0833b189e4c9c53f2ef1e1eaa29f6224dbc809b707a", size = 149266 }, { url = "https://files.pythonhosted.org/packages/00/e7/ed3243b30d1bec41675b6394a1daae46349dc2b855cb83be846a5a918238/ecdsa-0.19.0-py2.py3-none-any.whl", hash = "sha256:2cea9b88407fdac7bbeca0833b189e4c9c53f2ef1e1eaa29f6224dbc809b707a", size = 149266 },
] ]
[[package]]
name = "einops"
version = "0.8.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/79/ca/9f5dcb8bead39959454c3912266bedc4c315839cee0e0ca9f4328f4588c1/einops-0.8.0.tar.gz", hash = "sha256:63486517fed345712a8385c100cb279108d9d47e6ae59099b07657e983deae85", size = 58861 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/44/5a/f0b9ad6c0a9017e62d4735daaeb11ba3b6c009d69a26141b258cd37b5588/einops-0.8.0-py3-none-any.whl", hash = "sha256:9572fb63046264a862693b0a87088af3bdc8c068fde03de63453cbbde245465f", size = 43223 },
]
[[package]] [[package]]
name = "email-validator" name = "email-validator"
version = "2.2.0" version = "2.2.0"
@@ -815,6 +917,19 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/e6/90/20ad30babfa8f2b5ab46281d8e17bdfdbb3ac294cda14d525b9c2d958846/emoji-2.12.1-py3-none-any.whl", hash = "sha256:a00d62173bdadc2510967a381810101624a2f0986145b8da0cffa42e29430235", size = 431357 }, { url = "https://files.pythonhosted.org/packages/e6/90/20ad30babfa8f2b5ab46281d8e17bdfdbb3ac294cda14d525b9c2d958846/emoji-2.12.1-py3-none-any.whl", hash = "sha256:a00d62173bdadc2510967a381810101624a2f0986145b8da0cffa42e29430235", size = 431357 },
] ]
[[package]]
name = "environs"
version = "9.5.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "marshmallow" },
{ name = "python-dotenv" },
]
sdist = { url = "https://files.pythonhosted.org/packages/d4/e3/c3c6c76f3dbe3e019e9a451b35bf9f44690026a5bb1232f7b77097b72ff5/environs-9.5.0.tar.gz", hash = "sha256:a76307b36fbe856bdca7ee9161e6c466fd7fcffc297109a118c59b54e27e30c9", size = 20795 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/ca/5e/f0f217dc393372681bfe05c50f06a212e78d0a3fee907a74ab451ec1dcdb/environs-9.5.0-py2.py3-none-any.whl", hash = "sha256:1e549569a3de49c05f856f40bce86979e7d5ffbbc4398e7f338574c220189124", size = 12548 },
]
[[package]] [[package]]
name = "et-xmlfile" name = "et-xmlfile"
version = "1.1.0" version = "1.1.0"
@@ -1044,6 +1159,47 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/5e/44/73bea497ac69bafde2ee4269292fa3b41f1198f4bb7bbaaabde30ad29d4a/fsspec-2024.6.1-py3-none-any.whl", hash = "sha256:3cb443f8bcd2efb31295a5b9fdb02aee81d8452c80d28f97a6d0959e6cee101e", size = 177561 }, { url = "https://files.pythonhosted.org/packages/5e/44/73bea497ac69bafde2ee4269292fa3b41f1198f4bb7bbaaabde30ad29d4a/fsspec-2024.6.1-py3-none-any.whl", hash = "sha256:3cb443f8bcd2efb31295a5b9fdb02aee81d8452c80d28f97a6d0959e6cee101e", size = 177561 },
] ]
[package.optional-dependencies]
http = [
{ name = "aiohttp" },
]
[[package]]
name = "git-python"
version = "1.0.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "gitpython" },
]
sdist = { url = "https://files.pythonhosted.org/packages/5b/3c/f0726fd577517ff8f09e6fe49f153ec9c595f1964c02c209c757d473780a/git-python-1.0.3.zip", hash = "sha256:a7f51d07c7a0b0a15cb4dfa78601196dd20624211153d07c092b811edb6e86fb", size = 4286 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/8a/de/0cc6353a45cdb1e137cffac5383097b300cc578e2e1133eeb847e23a1394/git_python-1.0.3-py2.py3-none-any.whl", hash = "sha256:8820ce93786cd11a76d44c7153708588e8056213e4c512406ea3732871aa9ad6", size = 1888 },
]
[[package]]
name = "gitdb"
version = "4.0.11"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "smmap" },
]
sdist = { url = "https://files.pythonhosted.org/packages/19/0d/bbb5b5ee188dec84647a4664f3e11b06ade2bde568dbd489d9d64adef8ed/gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b", size = 394469 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/fd/5b/8f0c4a5bb9fd491c277c21eff7ccae71b47d43c4446c9d0c6cff2fe8c2c4/gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4", size = 62721 },
]
[[package]]
name = "gitpython"
version = "3.1.43"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "gitdb" },
]
sdist = { url = "https://files.pythonhosted.org/packages/b6/a1/106fd9fa2dd989b6fb36e5893961f82992cf676381707253e0bf93eb1662/GitPython-3.1.43.tar.gz", hash = "sha256:35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c", size = 214149 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/e9/bd/cc3a402a6439c15c3d4294333e13042b915bbeab54edc457c723931fed3f/GitPython-3.1.43-py3-none-any.whl", hash = "sha256:eec7ec56b92aad751f9912a73404bc02ba212a23adb2c7098ee668417051a1ff", size = 207337 },
]
[[package]] [[package]]
name = "google-ai-generativelanguage" name = "google-ai-generativelanguage"
version = "0.6.6" version = "0.6.6"
@@ -1762,6 +1918,20 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 }, { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 },
] ]
[[package]]
name = "milvus-lite"
version = "2.4.10"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "tqdm" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/7c/0b/262997e63e2eaaf5d9f93d73c9d3e75499c6ec058bd1307864be7efb6704/milvus_lite-2.4.10-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:fc4246d3ed7d1910847afce0c9ba18212e93a6e9b8406048436940578dfad5cb", size = 22281832 },
{ url = "https://files.pythonhosted.org/packages/17/20/9054ace78c61d64a6c24b8e3d6c8a73b23b447028e43c4d1e6c878e8294a/milvus_lite-2.4.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:74a8e07c5e3b057df17fbb46913388e84df1dc403a200f4e423799a58184c800", size = 19855994 },
{ url = "https://files.pythonhosted.org/packages/34/8e/7858d12d89bf9e84302c6ffd5faf776d7b2de4372a07461f726ce6f9929e/milvus_lite-2.4.10-py3-none-manylinux2014_aarch64.whl", hash = "sha256:240c7386b747bad696ecb5bd1f58d491e86b9d4b92dccee3315ed7256256eddc", size = 39614866 },
{ url = "https://files.pythonhosted.org/packages/84/65/639cb552c892ba5fef73301f878b2e7cabb59c918e0c49c9cf3026d49447/milvus_lite-2.4.10-py3-none-manylinux2014_x86_64.whl", hash = "sha256:211d2e334a043f9282bdd9755f76b9b2d93b23bffa7af240919ffce6a8dfe325", size = 49377774 },
]
[[package]] [[package]]
name = "mmh3" name = "mmh3"
version = "4.1.0" version = "4.1.0"
@@ -1872,6 +2042,19 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/fa/a2/17e1e23c6be0a916219c5292f509360c345b5fa6beeb50d743203c27532c/multidict-6.0.5-py3-none-any.whl", hash = "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7", size = 9729 }, { url = "https://files.pythonhosted.org/packages/fa/a2/17e1e23c6be0a916219c5292f509360c345b5fa6beeb50d743203c27532c/multidict-6.0.5-py3-none-any.whl", hash = "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7", size = 9729 },
] ]
[[package]]
name = "multiprocess"
version = "0.70.16"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "dill" },
]
sdist = { url = "https://files.pythonhosted.org/packages/b5/ae/04f39c5d0d0def03247c2893d6f2b83c136bf3320a2154d7b8858f2ba72d/multiprocess-0.70.16.tar.gz", hash = "sha256:161af703d4652a0e1410be6abccecde4a7ddffd19341be0a7011b94aeb171ac1", size = 1772603 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/50/15/b56e50e8debaf439f44befec5b2af11db85f6e0f344c3113ae0be0593a91/multiprocess-0.70.16-py311-none-any.whl", hash = "sha256:af4cabb0dac72abfb1e794fa7855c325fd2b55a10a44628a3c1ad3311c04127a", size = 143519 },
{ url = "https://files.pythonhosted.org/packages/0a/7d/a988f258104dcd2ccf1ed40fdc97e26c4ac351eeaf81d76e266c52d84e2f/multiprocess-0.70.16-py312-none-any.whl", hash = "sha256:fc0544c531920dde3b00c29863377f87e1632601092ea2daca74e4beb40faa2e", size = 146741 },
]
[[package]] [[package]]
name = "mypy-extensions" name = "mypy-extensions"
version = "1.0.0" version = "1.0.0"
@@ -1899,6 +2082,28 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/38/e9/5f72929373e1a0e8d142a130f3f97e6ff920070f87f91c4e13e40e0fba5a/networkx-3.3-py3-none-any.whl", hash = "sha256:28575580c6ebdaf4505b22c6256a2b9de86b316dc63ba9e93abde3d78dfdbcf2", size = 1702396 }, { url = "https://files.pythonhosted.org/packages/38/e9/5f72929373e1a0e8d142a130f3f97e6ff920070f87f91c4e13e40e0fba5a/networkx-3.3-py3-none-any.whl", hash = "sha256:28575580c6ebdaf4505b22c6256a2b9de86b316dc63ba9e93abde3d78dfdbcf2", size = 1702396 },
] ]
[[package]]
name = "ninja"
version = "1.11.1.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/37/2c/d717d13a413d6f7579cdaa1e28e6e2c98de95461549b08d311c8a5bf4c51/ninja-1.11.1.1.tar.gz", hash = "sha256:9d793b08dd857e38d0b6ffe9e6b7145d7c485a42dcfea04905ca0cdb6017cc3c", size = 132392 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/3d/6e/04ed11bb244039908f6f212cb5f3e97933e238655248e4ce307c1687ba1f/ninja-1.11.1.1-py2.py3-none-macosx_10_9_universal2.macosx_10_9_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:376889c76d87b95b5719fdd61dd7db193aa7fd4432e5d52d2e44e4c497bdbbee", size = 270611 },
{ url = "https://files.pythonhosted.org/packages/2c/52/0e5423311eb9939b6f9354059a6d88a6211eb4fa1c7a4ef303ecee1c1fe0/ninja-1.11.1.1-py2.py3-none-manylinux1_i686.manylinux_2_5_i686.whl", hash = "sha256:ecf80cf5afd09f14dcceff28cb3f11dc90fb97c999c89307aea435889cb66877", size = 324256 },
{ url = "https://files.pythonhosted.org/packages/6d/92/8d7aebd4430ab5ff65df2bfee6d5745f95c004284db2d8ca76dcbfd9de47/ninja-1.11.1.1-py2.py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:84502ec98f02a037a169c4b0d5d86075eaf6afc55e1879003d6cab51ced2ea4b", size = 307194 },
{ url = "https://files.pythonhosted.org/packages/01/c8/96424839fd127b4492229acf50763ed9940d864ca35d17d151934aef1f6f/ninja-1.11.1.1-py2.py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:73b93c14046447c7c5cc892433d4fae65d6364bec6685411cb97a8bcf815f93a", size = 155643 },
{ url = "https://files.pythonhosted.org/packages/6b/fa/5ca8e65a98cdb9a71d4f1e38cac7bd757bbb9555a5aef5a4d293aa890e5c/ninja-1.11.1.1-py2.py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:18302d96a5467ea98b68e1cae1ae4b4fb2b2a56a82b955193c637557c7273dbd", size = 179538 },
{ url = "https://files.pythonhosted.org/packages/45/ef/60086f02cbc6882da00a02c81d645cefd8d2d65b01fade41b873d8dd85a2/ninja-1.11.1.1-py2.py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:aad34a70ef15b12519946c5633344bc775a7656d789d9ed5fdb0d456383716ef", size = 156217 },
{ url = "https://files.pythonhosted.org/packages/1c/00/2fd13ac6aafdb566f00d6b541101fca54e58ae58bf96c00f9780df019607/ninja-1.11.1.1-py2.py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:d491fc8d89cdcb416107c349ad1e3a735d4c4af5e1cb8f5f727baca6350fdaea", size = 372069 },
{ url = "https://files.pythonhosted.org/packages/ad/5d/6e97c8a25167d4867694c7fb0b9bdbc9b096d6479c8e56c5bd41b49613f6/ninja-1.11.1.1-py2.py3-none-musllinux_1_1_i686.whl", hash = "sha256:7563ce1d9fe6ed5af0b8dd9ab4a214bf4ff1f2f6fd6dc29f480981f0f8b8b249", size = 418859 },
{ url = "https://files.pythonhosted.org/packages/43/78/34af88d753389a9412438d16142c77e587e0d69152faf0bbf99701063dd8/ninja-1.11.1.1-py2.py3-none-musllinux_1_1_ppc64le.whl", hash = "sha256:9df724344202b83018abb45cb1efc22efd337a1496514e7e6b3b59655be85205", size = 419782 },
{ url = "https://files.pythonhosted.org/packages/3b/74/de0633f8bced3b188942fca64a950e8f2206c60c10c97af465b356ae9b25/ninja-1.11.1.1-py2.py3-none-musllinux_1_1_s390x.whl", hash = "sha256:3e0f9be5bb20d74d58c66cc1c414c3e6aeb45c35b0d0e41e8d739c2c0d57784f", size = 415476 },
{ url = "https://files.pythonhosted.org/packages/9a/f3/3e4a56ff77739d1582749b93497bdebf11e003fbc7a66363ef6c772ebd0a/ninja-1.11.1.1-py2.py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:76482ba746a2618eecf89d5253c0d1e4f1da1270d41e9f54dfbd91831b0f6885", size = 379229 },
{ url = "https://files.pythonhosted.org/packages/c5/ee/53df34fcc9c0b1db62b2f2e2c848e28d9354e1c7f0dce029ee50b16ca157/ninja-1.11.1.1-py2.py3-none-win32.whl", hash = "sha256:fa2ba9d74acfdfbfbcf06fad1b8282de8a7a8c481d9dee45c859a8c93fcc1082", size = 265049 },
{ url = "https://files.pythonhosted.org/packages/b6/2f/a3bc50fa63fc4fe9348e15b53dc8c87febfd4e0c660fcf250c4b19a3aa3b/ninja-1.11.1.1-py2.py3-none-win_amd64.whl", hash = "sha256:95da904130bfa02ea74ff9c0116b4ad266174fafb1c707aa50212bc7859aebf1", size = 312958 },
{ url = "https://files.pythonhosted.org/packages/73/2a/f5b7b3b7ecd5cf4e31375580bf5c6a01a328ed1ebdfff90fab463e3f4bc7/ninja-1.11.1.1-py2.py3-none-win_arm64.whl", hash = "sha256:185e0641bde601e53841525c4196278e9aaf4463758da6dd1e752c0a0f54136a", size = 272686 },
]
[[package]] [[package]]
name = "nltk" name = "nltk"
version = "3.9.1" version = "3.9.1"
@@ -2120,7 +2325,7 @@ wheels = [
[[package]] [[package]]
name = "open-webui" name = "open-webui"
version = "0.3.17.dev3" version = "0.3.29"
source = { editable = "." } source = { editable = "." }
dependencies = [ dependencies = [
{ name = "aiohttp" }, { name = "aiohttp" },
@@ -2133,9 +2338,11 @@ dependencies = [
{ name = "black" }, { name = "black" },
{ name = "boto3" }, { name = "boto3" },
{ name = "chromadb" }, { name = "chromadb" },
{ name = "colbert-ai" },
{ name = "docker" }, { name = "docker" },
{ name = "docx2txt" }, { name = "docx2txt" },
{ name = "duckduckgo-search" }, { name = "duckduckgo-search" },
{ name = "einops" },
{ name = "extract-msg" }, { name = "extract-msg" },
{ name = "fake-useragent" }, { name = "fake-useragent" },
{ name = "fastapi" }, { name = "fastapi" },
@@ -2162,6 +2369,7 @@ dependencies = [
{ name = "pydantic" }, { name = "pydantic" },
{ name = "pydub" }, { name = "pydub" },
{ name = "pyjwt", extra = ["crypto"] }, { name = "pyjwt", extra = ["crypto"] },
{ name = "pymilvus" },
{ name = "pymongo" }, { name = "pymongo" },
{ name = "pymysql" }, { name = "pymysql" },
{ name = "pypandoc" }, { name = "pypandoc" },
@@ -2200,9 +2408,11 @@ requires-dist = [
{ name = "black", specifier = "==24.8.0" }, { name = "black", specifier = "==24.8.0" },
{ name = "boto3", specifier = "==1.35.0" }, { name = "boto3", specifier = "==1.35.0" },
{ name = "chromadb", specifier = "==0.5.5" }, { name = "chromadb", specifier = "==0.5.5" },
{ name = "colbert-ai", specifier = "==0.2.21" },
{ name = "docker", specifier = "~=7.1.0" }, { name = "docker", specifier = "~=7.1.0" },
{ name = "docx2txt", specifier = "==0.8" }, { name = "docx2txt", specifier = "==0.8" },
{ name = "duckduckgo-search", specifier = "~=6.2.11" }, { name = "duckduckgo-search", specifier = "~=6.2.11" },
{ name = "einops", specifier = "==0.8.0" },
{ name = "extract-msg" }, { name = "extract-msg" },
{ name = "fake-useragent", specifier = "==1.5.1" }, { name = "fake-useragent", specifier = "==1.5.1" },
{ name = "fastapi", specifier = "==0.111.0" }, { name = "fastapi", specifier = "==0.111.0" },
@@ -2229,6 +2439,7 @@ requires-dist = [
{ name = "pydantic", specifier = "==2.8.2" }, { name = "pydantic", specifier = "==2.8.2" },
{ name = "pydub" }, { name = "pydub" },
{ name = "pyjwt", extras = ["crypto"], specifier = "==2.9.0" }, { name = "pyjwt", extras = ["crypto"], specifier = "==2.9.0" },
{ name = "pymilvus", specifier = "==2.4.6" },
{ name = "pymongo" }, { name = "pymongo" },
{ name = "pymysql", specifier = "==1.1.1" }, { name = "pymysql", specifier = "==1.1.1" },
{ name = "pypandoc", specifier = "==1.13" }, { name = "pypandoc", specifier = "==1.13" },
@@ -2678,17 +2889,17 @@ wheels = [
[[package]] [[package]]
name = "primp" name = "primp"
version = "0.6.1" version = "0.6.3"
source = { registry = "https://pypi.org/simple" } source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/30/bf/6c09168d11467cac9104aaa486b916cfab3f3883d812088d59cdec412d2f/primp-0.6.1.tar.gz", hash = "sha256:64b3c12e3d463a887518811c46f3ec37cca02e6af1ddf1287e548342de436301", size = 79231 } sdist = { url = "https://files.pythonhosted.org/packages/63/9c/10d2c7b734228021cf17d92b2872ed53535103d29a38a6ad4eee89a8ae1b/primp-0.6.3.tar.gz", hash = "sha256:17d30ebe26864defad5232dbbe1372e80483940012356e1f68846bb182282039", size = 78662 }
wheels = [ wheels = [
{ url = "https://files.pythonhosted.org/packages/fc/00/98a0b612613902b4b5139da271786e586701d100f610b2a97b16b45e8783/primp-0.6.1-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:60cfe95e0bdf154b0f9036d38acaddc9aef02d6723ed125839b01449672d3946", size = 2708129 }, { url = "https://files.pythonhosted.org/packages/61/09/96e8327fd8c1224226d9a170daf1dcba7d3f6578edeb9f811803f2a61aba/primp-0.6.3-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:bdbe6a7cdaaf5c9ed863432a941f4a75bd4c6ff626cbc8d32fc232793c70ba06", size = 2719331 },
{ url = "https://files.pythonhosted.org/packages/6e/fc/5894b24c5794a357697fd0d0f789a82ed941571739178ebd6fd93c37fe26/primp-0.6.1-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:e1e92433ecf32639f9e800bc3a5d58b03792bdec99421b7fb06500e2fae63c85", size = 2500377 }, { url = "https://files.pythonhosted.org/packages/b3/a1/b58ac752b0500208df1be3b762eeaff1a117ec3108e26b38821ae9ac31e0/primp-0.6.3-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:eeb53eb987bdcbcd85740633470255cab887d921df713ffa12a36a13366c9cdb", size = 2517811 },
{ url = "https://files.pythonhosted.org/packages/06/cc/501c5becc8ebb7d2897e88ea1ba5619516016c9bf9f5e3c766537525ca8a/primp-0.6.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e02353f13f07fb5a6f91df9e2f4d8ec9f41312de95088744dce1c9729a3865d", size = 2806351 }, { url = "https://files.pythonhosted.org/packages/f7/85/ca027d7ec6121346d5927205777ad74bf918f291a538d710b5f9e0957333/primp-0.6.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78da53d3c92a8e3f05bd3286ac76c291f1b6fe5e08ea63b7ba92b0f9141800bb", size = 2826729 },
{ url = "https://files.pythonhosted.org/packages/c5/d4/33cf02d6e343e3d27e79fddb5898d84c26560f86f7b8952af6518be26770/primp-0.6.1-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:c5a2ccfdf488b17be225a529a31e2b22724b2e22fba8e1ae168a222f857c2dc0", size = 2722920 }, { url = "https://files.pythonhosted.org/packages/3a/45/ff51ccc5dbc82afa6d2dda15bf07b21b6b44708d02934cd7562007d1f719/primp-0.6.3-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:86337b44deecdac752bd8112909987fc9fa9b894f30191c80a164dc8f895da53", size = 2739692 },
{ url = "https://files.pythonhosted.org/packages/0e/91/ec7aeeb9715bb9a9f355919163b25dde239c43738f2e31653113b52c09c5/primp-0.6.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f335c2ace907800a23bbb7bc6e15acc7fff659b86a2d5858817f6ed79cea07cf", size = 2883301 }, { url = "https://files.pythonhosted.org/packages/74/a1/a626fb8d2f6499d3e05971b2dcd33d770244722ee52f7d2c4ab636c1157f/primp-0.6.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d3cd9a22b97f3eae42b2a5fb99f00480daf4cd6d9b139e05b0ffb03f7cc037f3", size = 2900573 },
{ url = "https://files.pythonhosted.org/packages/e5/dd/262d646a981802035f585b369ee93cc5187d05eb3b0f41e1b81020f56da2/primp-0.6.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5dc15bd9d47ded7bc356fcb5d8321972dcbeba18e7d3b7250e12bb7365447b2b", size = 3037325 }, { url = "https://files.pythonhosted.org/packages/09/55/c96cb510c9f7881fa01bc7b269e446d32635ab9f0adbd36918c69b45a140/primp-0.6.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7732bec917e2d3c48a31cdb92e1250f4ad6203a1aa4f802bd9abd84f2286a1e0", size = 3058818 },
{ url = "https://files.pythonhosted.org/packages/e6/69/c30564f546dc2c1f118526d2f1dc17d8440b2fe2c574018333881450a860/primp-0.6.1-cp38-abi3-win_amd64.whl", hash = "sha256:eebf0412ebba4089547b16b97b765d83f69f1433d811bb02b02cdcdbca20f672", size = 2736167 }, { url = "https://files.pythonhosted.org/packages/98/de/5c1dab24c1bff7933d0e4e8f4d0f46b66fc23531258d8433789c4468cac3/primp-0.6.3-cp38-abi3-win_amd64.whl", hash = "sha256:1e4113c34b86c676ae321af185f03a372caef3ee009f1682c2d62e30ec87348c", size = 2757631 },
] ]
[[package]] [[package]]
@@ -2766,6 +2977,31 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/7b/08/9c66c269b0d417a0af9fb969535f0371b8c538633535a7a6a5ca3f9231e2/psycopg2_binary-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:81ff62668af011f9a48787564ab7eded4e9fb17a4a6a74af5ffa6a457400d2ab", size = 1163864 }, { url = "https://files.pythonhosted.org/packages/7b/08/9c66c269b0d417a0af9fb969535f0371b8c538633535a7a6a5ca3f9231e2/psycopg2_binary-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:81ff62668af011f9a48787564ab7eded4e9fb17a4a6a74af5ffa6a457400d2ab", size = 1163864 },
] ]
[[package]]
name = "pyarrow"
version = "17.0.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "numpy" },
]
sdist = { url = "https://files.pythonhosted.org/packages/27/4e/ea6d43f324169f8aec0e57569443a38bab4b398d09769ca64f7b4d467de3/pyarrow-17.0.0.tar.gz", hash = "sha256:4beca9521ed2c0921c1023e68d097d0299b62c362639ea315572a58f3f50fd28", size = 1112479 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/f9/46/ce89f87c2936f5bb9d879473b9663ce7a4b1f4359acc2f0eb39865eaa1af/pyarrow-17.0.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:1c8856e2ef09eb87ecf937104aacfa0708f22dfeb039c363ec99735190ffb977", size = 29028748 },
{ url = "https://files.pythonhosted.org/packages/8d/8e/ce2e9b2146de422f6638333c01903140e9ada244a2a477918a368306c64c/pyarrow-17.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2e19f569567efcbbd42084e87f948778eb371d308e137a0f97afe19bb860ccb3", size = 27190965 },
{ url = "https://files.pythonhosted.org/packages/3b/c8/5675719570eb1acd809481c6d64e2136ffb340bc387f4ca62dce79516cea/pyarrow-17.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b244dc8e08a23b3e352899a006a26ae7b4d0da7bb636872fa8f5884e70acf15", size = 39269081 },
{ url = "https://files.pythonhosted.org/packages/5e/78/3931194f16ab681ebb87ad252e7b8d2c8b23dad49706cadc865dff4a1dd3/pyarrow-17.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b72e87fe3e1db343995562f7fff8aee354b55ee83d13afba65400c178ab2597", size = 39864921 },
{ url = "https://files.pythonhosted.org/packages/d8/81/69b6606093363f55a2a574c018901c40952d4e902e670656d18213c71ad7/pyarrow-17.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dc5c31c37409dfbc5d014047817cb4ccd8c1ea25d19576acf1a001fe07f5b420", size = 38740798 },
{ url = "https://files.pythonhosted.org/packages/4c/21/9ca93b84b92ef927814cb7ba37f0774a484c849d58f0b692b16af8eebcfb/pyarrow-17.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:e3343cb1e88bc2ea605986d4b94948716edc7a8d14afd4e2c097232f729758b4", size = 39871877 },
{ url = "https://files.pythonhosted.org/packages/30/d1/63a7c248432c71c7d3ee803e706590a0b81ce1a8d2b2ae49677774b813bb/pyarrow-17.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:a27532c38f3de9eb3e90ecab63dfda948a8ca859a66e3a47f5f42d1e403c4d03", size = 25151089 },
{ url = "https://files.pythonhosted.org/packages/d4/62/ce6ac1275a432b4a27c55fe96c58147f111d8ba1ad800a112d31859fae2f/pyarrow-17.0.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:9b8a823cea605221e61f34859dcc03207e52e409ccf6354634143e23af7c8d22", size = 29019418 },
{ url = "https://files.pythonhosted.org/packages/8e/0a/dbd0c134e7a0c30bea439675cc120012337202e5fac7163ba839aa3691d2/pyarrow-17.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f1e70de6cb5790a50b01d2b686d54aaf73da01266850b05e3af2a1bc89e16053", size = 27152197 },
{ url = "https://files.pythonhosted.org/packages/cb/05/3f4a16498349db79090767620d6dc23c1ec0c658a668d61d76b87706c65d/pyarrow-17.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0071ce35788c6f9077ff9ecba4858108eebe2ea5a3f7cf2cf55ebc1dbc6ee24a", size = 39263026 },
{ url = "https://files.pythonhosted.org/packages/c2/0c/ea2107236740be8fa0e0d4a293a095c9f43546a2465bb7df34eee9126b09/pyarrow-17.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:757074882f844411fcca735e39aae74248a1531367a7c80799b4266390ae51cc", size = 39880798 },
{ url = "https://files.pythonhosted.org/packages/f6/b0/b9164a8bc495083c10c281cc65064553ec87b7537d6f742a89d5953a2a3e/pyarrow-17.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:9ba11c4f16976e89146781a83833df7f82077cdab7dc6232c897789343f7891a", size = 38715172 },
{ url = "https://files.pythonhosted.org/packages/f1/c4/9625418a1413005e486c006e56675334929fad864347c5ae7c1b2e7fe639/pyarrow-17.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b0c6ac301093b42d34410b187bba560b17c0330f64907bfa4f7f7f2444b0cf9b", size = 39874508 },
{ url = "https://files.pythonhosted.org/packages/ae/49/baafe2a964f663413be3bd1cf5c45ed98c5e42e804e2328e18f4570027c1/pyarrow-17.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:392bc9feabc647338e6c89267635e111d71edad5fcffba204425a7c8d13610d7", size = 25099235 },
]
[[package]] [[package]]
name = "pyasn1" name = "pyasn1"
version = "0.6.0" version = "0.6.0"
@@ -2909,6 +3145,24 @@ crypto = [
{ name = "cryptography" }, { name = "cryptography" },
] ]
[[package]]
name = "pymilvus"
version = "2.4.6"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "environs" },
{ name = "grpcio" },
{ name = "milvus-lite", marker = "sys_platform != 'win32'" },
{ name = "pandas" },
{ name = "protobuf" },
{ name = "setuptools" },
{ name = "ujson" },
]
sdist = { url = "https://files.pythonhosted.org/packages/40/20/203f77e8c35cac3e462307ba216c00525fd895618921d918fe814d426155/pymilvus-2.4.6.tar.gz", hash = "sha256:6ac3eb91c92cc01bbe444fe83f895f02d7b2546d96ac67998630bf31ac074d66", size = 1214006 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/1b/41/af144715fc246ee2232e609bf93ab7cfd4b417e14087606fd6d93cce7336/pymilvus-2.4.6-py3-none-any.whl", hash = "sha256:b4c43472edc313b845d313be50610e19054e6954b2c5c3b515565c596c2d3d97", size = 197837 },
]
[[package]] [[package]]
name = "pymongo" name = "pymongo"
version = "4.8.0" version = "4.8.0"
@@ -3633,6 +3887,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254", size = 11053 }, { url = "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254", size = 11053 },
] ]
[[package]]
name = "smmap"
version = "5.0.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/88/04/b5bf6d21dc4041000ccba7eb17dd3055feb237e7ffc2c20d3fae3af62baa/smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62", size = 22291 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/a7/a5/10f97f73544edcdef54409f1d839f6049a0d79df68adbc1ceb24d1aaca42/smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da", size = 24282 },
]
[[package]] [[package]]
name = "sniffio" name = "sniffio"
version = "1.3.1" version = "1.3.1"
@@ -4278,6 +4541,59 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/a7/ea/53d1fe468e63e092cf16e2c18d16f50c29851242f9dd12d6a66e0d7f0d02/XlsxWriter-3.2.0-py3-none-any.whl", hash = "sha256:ecfd5405b3e0e228219bcaf24c2ca0915e012ca9464a14048021d21a995d490e", size = 159925 }, { url = "https://files.pythonhosted.org/packages/a7/ea/53d1fe468e63e092cf16e2c18d16f50c29851242f9dd12d6a66e0d7f0d02/XlsxWriter-3.2.0-py3-none-any.whl", hash = "sha256:ecfd5405b3e0e228219bcaf24c2ca0915e012ca9464a14048021d21a995d490e", size = 159925 },
] ]
[[package]]
name = "xxhash"
version = "3.5.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/00/5e/d6e5258d69df8b4ed8c83b6664f2b47d30d2dec551a29ad72a6c69eafd31/xxhash-3.5.0.tar.gz", hash = "sha256:84f2caddf951c9cbf8dc2e22a89d4ccf5d86391ac6418fe81e3c67d0cf60b45f", size = 84241 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/b8/c7/afed0f131fbda960ff15eee7f304fa0eeb2d58770fade99897984852ef23/xxhash-3.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02c2e816896dc6f85922ced60097bcf6f008dedfc5073dcba32f9c8dd786f3c1", size = 31969 },
{ url = "https://files.pythonhosted.org/packages/8c/0c/7c3bc6d87e5235672fcc2fb42fd5ad79fe1033925f71bf549ee068c7d1ca/xxhash-3.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6027dcd885e21581e46d3c7f682cfb2b870942feeed58a21c29583512c3f09f8", size = 30800 },
{ url = "https://files.pythonhosted.org/packages/04/9e/01067981d98069eec1c20201f8c145367698e9056f8bc295346e4ea32dd1/xxhash-3.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1308fa542bbdbf2fa85e9e66b1077eea3a88bef38ee8a06270b4298a7a62a166", size = 221566 },
{ url = "https://files.pythonhosted.org/packages/d4/09/d4996de4059c3ce5342b6e1e6a77c9d6c91acce31f6ed979891872dd162b/xxhash-3.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c28b2fdcee797e1c1961cd3bcd3d545cab22ad202c846235197935e1df2f8ef7", size = 201214 },
{ url = "https://files.pythonhosted.org/packages/62/f5/6d2dc9f8d55a7ce0f5e7bfef916e67536f01b85d32a9fbf137d4cadbee38/xxhash-3.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:924361811732ddad75ff23e90efd9ccfda4f664132feecb90895bade6a1b4623", size = 429433 },
{ url = "https://files.pythonhosted.org/packages/d9/72/9256303f10e41ab004799a4aa74b80b3c5977d6383ae4550548b24bd1971/xxhash-3.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89997aa1c4b6a5b1e5b588979d1da048a3c6f15e55c11d117a56b75c84531f5a", size = 194822 },
{ url = "https://files.pythonhosted.org/packages/34/92/1a3a29acd08248a34b0e6a94f4e0ed9b8379a4ff471f1668e4dce7bdbaa8/xxhash-3.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:685c4f4e8c59837de103344eb1c8a3851f670309eb5c361f746805c5471b8c88", size = 208538 },
{ url = "https://files.pythonhosted.org/packages/53/ad/7fa1a109663366de42f724a1cdb8e796a260dbac45047bce153bc1e18abf/xxhash-3.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbd2ecfbfee70bc1a4acb7461fa6af7748ec2ab08ac0fa298f281c51518f982c", size = 216953 },
{ url = "https://files.pythonhosted.org/packages/35/02/137300e24203bf2b2a49b48ce898ecce6fd01789c0fcd9c686c0a002d129/xxhash-3.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:25b5a51dc3dfb20a10833c8eee25903fd2e14059e9afcd329c9da20609a307b2", size = 203594 },
{ url = "https://files.pythonhosted.org/packages/23/03/aeceb273933d7eee248c4322b98b8e971f06cc3880e5f7602c94e5578af5/xxhash-3.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a8fb786fb754ef6ff8c120cb96629fb518f8eb5a61a16aac3a979a9dbd40a084", size = 210971 },
{ url = "https://files.pythonhosted.org/packages/e3/64/ed82ec09489474cbb35c716b189ddc1521d8b3de12b1b5ab41ce7f70253c/xxhash-3.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a905ad00ad1e1c34fe4e9d7c1d949ab09c6fa90c919860c1534ff479f40fd12d", size = 415050 },
{ url = "https://files.pythonhosted.org/packages/71/43/6db4c02dcb488ad4e03bc86d70506c3d40a384ee73c9b5c93338eb1f3c23/xxhash-3.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:963be41bcd49f53af6d795f65c0da9b4cc518c0dd9c47145c98f61cb464f4839", size = 192216 },
{ url = "https://files.pythonhosted.org/packages/22/6d/db4abec29e7a567455344433d095fdb39c97db6955bb4a2c432e486b4d28/xxhash-3.5.0-cp311-cp311-win32.whl", hash = "sha256:109b436096d0a2dd039c355fa3414160ec4d843dfecc64a14077332a00aeb7da", size = 30120 },
{ url = "https://files.pythonhosted.org/packages/52/1c/fa3b61c0cf03e1da4767213672efe186b1dfa4fc901a4a694fb184a513d1/xxhash-3.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:b702f806693201ad6c0a05ddbbe4c8f359626d0b3305f766077d51388a6bac58", size = 30003 },
{ url = "https://files.pythonhosted.org/packages/6b/8e/9e6fc572acf6e1cc7ccb01973c213f895cb8668a9d4c2b58a99350da14b7/xxhash-3.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:c4dcb4120d0cc3cc448624147dba64e9021b278c63e34a38789b688fd0da9bf3", size = 26777 },
{ url = "https://files.pythonhosted.org/packages/07/0e/1bfce2502c57d7e2e787600b31c83535af83746885aa1a5f153d8c8059d6/xxhash-3.5.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:14470ace8bd3b5d51318782cd94e6f94431974f16cb3b8dc15d52f3b69df8e00", size = 31969 },
{ url = "https://files.pythonhosted.org/packages/3f/d6/8ca450d6fe5b71ce521b4e5db69622383d039e2b253e9b2f24f93265b52c/xxhash-3.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:59aa1203de1cb96dbeab595ded0ad0c0056bb2245ae11fac11c0ceea861382b9", size = 30787 },
{ url = "https://files.pythonhosted.org/packages/5b/84/de7c89bc6ef63d750159086a6ada6416cc4349eab23f76ab870407178b93/xxhash-3.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08424f6648526076e28fae6ea2806c0a7d504b9ef05ae61d196d571e5c879c84", size = 220959 },
{ url = "https://files.pythonhosted.org/packages/fe/86/51258d3e8a8545ff26468c977101964c14d56a8a37f5835bc0082426c672/xxhash-3.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61a1ff00674879725b194695e17f23d3248998b843eb5e933007ca743310f793", size = 200006 },
{ url = "https://files.pythonhosted.org/packages/02/0a/96973bd325412feccf23cf3680fd2246aebf4b789122f938d5557c54a6b2/xxhash-3.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2f2c61bee5844d41c3eb015ac652a0229e901074951ae48581d58bfb2ba01be", size = 428326 },
{ url = "https://files.pythonhosted.org/packages/11/a7/81dba5010f7e733de88af9555725146fc133be97ce36533867f4c7e75066/xxhash-3.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d32a592cac88d18cc09a89172e1c32d7f2a6e516c3dfde1b9adb90ab5df54a6", size = 194380 },
{ url = "https://files.pythonhosted.org/packages/fb/7d/f29006ab398a173f4501c0e4977ba288f1c621d878ec217b4ff516810c04/xxhash-3.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70dabf941dede727cca579e8c205e61121afc9b28516752fd65724be1355cc90", size = 207934 },
{ url = "https://files.pythonhosted.org/packages/8a/6e/6e88b8f24612510e73d4d70d9b0c7dff62a2e78451b9f0d042a5462c8d03/xxhash-3.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e5d0ddaca65ecca9c10dcf01730165fd858533d0be84c75c327487c37a906a27", size = 216301 },
{ url = "https://files.pythonhosted.org/packages/af/51/7862f4fa4b75a25c3b4163c8a873f070532fe5f2d3f9b3fc869c8337a398/xxhash-3.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e5b5e16c5a480fe5f59f56c30abdeba09ffd75da8d13f6b9b6fd224d0b4d0a2", size = 203351 },
{ url = "https://files.pythonhosted.org/packages/22/61/8d6a40f288f791cf79ed5bb113159abf0c81d6efb86e734334f698eb4c59/xxhash-3.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149b7914451eb154b3dfaa721315117ea1dac2cc55a01bfbd4df7c68c5dd683d", size = 210294 },
{ url = "https://files.pythonhosted.org/packages/17/02/215c4698955762d45a8158117190261b2dbefe9ae7e5b906768c09d8bc74/xxhash-3.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:eade977f5c96c677035ff39c56ac74d851b1cca7d607ab3d8f23c6b859379cab", size = 414674 },
{ url = "https://files.pythonhosted.org/packages/31/5c/b7a8db8a3237cff3d535261325d95de509f6a8ae439a5a7a4ffcff478189/xxhash-3.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fa9f547bd98f5553d03160967866a71056a60960be00356a15ecc44efb40ba8e", size = 192022 },
{ url = "https://files.pythonhosted.org/packages/78/e3/dd76659b2811b3fd06892a8beb850e1996b63e9235af5a86ea348f053e9e/xxhash-3.5.0-cp312-cp312-win32.whl", hash = "sha256:f7b58d1fd3551b8c80a971199543379be1cee3d0d409e1f6d8b01c1a2eebf1f8", size = 30170 },
{ url = "https://files.pythonhosted.org/packages/d9/6b/1c443fe6cfeb4ad1dcf231cdec96eb94fb43d6498b4469ed8b51f8b59a37/xxhash-3.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:fa0cafd3a2af231b4e113fba24a65d7922af91aeb23774a8b78228e6cd785e3e", size = 30040 },
{ url = "https://files.pythonhosted.org/packages/0f/eb/04405305f290173acc0350eba6d2f1a794b57925df0398861a20fbafa415/xxhash-3.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:586886c7e89cb9828bcd8a5686b12e161368e0064d040e225e72607b43858ba2", size = 26796 },
{ url = "https://files.pythonhosted.org/packages/c9/b8/e4b3ad92d249be5c83fa72916c9091b0965cb0faeff05d9a0a3870ae6bff/xxhash-3.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:37889a0d13b0b7d739cfc128b1c902f04e32de17b33d74b637ad42f1c55101f6", size = 31795 },
{ url = "https://files.pythonhosted.org/packages/fc/d8/b3627a0aebfbfa4c12a41e22af3742cf08c8ea84f5cc3367b5de2d039cce/xxhash-3.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:97a662338797c660178e682f3bc180277b9569a59abfb5925e8620fba00b9fc5", size = 30792 },
{ url = "https://files.pythonhosted.org/packages/c3/cc/762312960691da989c7cd0545cb120ba2a4148741c6ba458aa723c00a3f8/xxhash-3.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f85e0108d51092bdda90672476c7d909c04ada6923c14ff9d913c4f7dc8a3bc", size = 220950 },
{ url = "https://files.pythonhosted.org/packages/fe/e9/cc266f1042c3c13750e86a535496b58beb12bf8c50a915c336136f6168dc/xxhash-3.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2fd827b0ba763ac919440042302315c564fdb797294d86e8cdd4578e3bc7f3", size = 199980 },
{ url = "https://files.pythonhosted.org/packages/bf/85/a836cd0dc5cc20376de26b346858d0ac9656f8f730998ca4324921a010b9/xxhash-3.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82085c2abec437abebf457c1d12fccb30cc8b3774a0814872511f0f0562c768c", size = 428324 },
{ url = "https://files.pythonhosted.org/packages/b4/0e/15c243775342ce840b9ba34aceace06a1148fa1630cd8ca269e3223987f5/xxhash-3.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07fda5de378626e502b42b311b049848c2ef38784d0d67b6f30bb5008642f8eb", size = 194370 },
{ url = "https://files.pythonhosted.org/packages/87/a1/b028bb02636dfdc190da01951d0703b3d904301ed0ef6094d948983bef0e/xxhash-3.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c279f0d2b34ef15f922b77966640ade58b4ccdfef1c4d94b20f2a364617a493f", size = 207911 },
{ url = "https://files.pythonhosted.org/packages/80/d5/73c73b03fc0ac73dacf069fdf6036c9abad82de0a47549e9912c955ab449/xxhash-3.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:89e66ceed67b213dec5a773e2f7a9e8c58f64daeb38c7859d8815d2c89f39ad7", size = 216352 },
{ url = "https://files.pythonhosted.org/packages/b6/2a/5043dba5ddbe35b4fe6ea0a111280ad9c3d4ba477dd0f2d1fe1129bda9d0/xxhash-3.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:bcd51708a633410737111e998ceb3b45d3dbc98c0931f743d9bb0a209033a326", size = 203410 },
{ url = "https://files.pythonhosted.org/packages/a2/b2/9a8ded888b7b190aed75b484eb5c853ddd48aa2896e7b59bbfbce442f0a1/xxhash-3.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3ff2c0a34eae7df88c868be53a8dd56fbdf592109e21d4bfa092a27b0bf4a7bf", size = 210322 },
{ url = "https://files.pythonhosted.org/packages/98/62/440083fafbc917bf3e4b67c2ade621920dd905517e85631c10aac955c1d2/xxhash-3.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:4e28503dccc7d32e0b9817aa0cbfc1f45f563b2c995b7a66c4c8a0d232e840c7", size = 414725 },
{ url = "https://files.pythonhosted.org/packages/75/db/009206f7076ad60a517e016bb0058381d96a007ce3f79fa91d3010f49cc2/xxhash-3.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a6c50017518329ed65a9e4829154626f008916d36295b6a3ba336e2458824c8c", size = 192070 },
{ url = "https://files.pythonhosted.org/packages/1f/6d/c61e0668943a034abc3a569cdc5aeae37d686d9da7e39cf2ed621d533e36/xxhash-3.5.0-cp313-cp313-win32.whl", hash = "sha256:53a068fe70301ec30d868ece566ac90d873e3bb059cf83c32e76012c889b8637", size = 30172 },
{ url = "https://files.pythonhosted.org/packages/96/14/8416dce965f35e3d24722cdf79361ae154fa23e2ab730e5323aa98d7919e/xxhash-3.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:80babcc30e7a1a484eab952d76a4f4673ff601f54d5142c26826502740e70b43", size = 30041 },
{ url = "https://files.pythonhosted.org/packages/27/ee/518b72faa2073f5aa8e3262408d284892cb79cf2754ba0c3a5870645ef73/xxhash-3.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:4811336f1ce11cac89dcbd18f3a25c527c16311709a89313c3acaf771def2d4b", size = 26801 },
]
[[package]] [[package]]
name = "yarl" name = "yarl"
version = "1.9.4" version = "1.9.4"