Skip to content

Commit ecd48e2

Browse files
tjbckjoaobackSNaytiPClassic298Algorithm5838
authored
* i18n: add pt-BR translations for newly added UI items and consistency pass (open-webui#26391) New **pt-BR** translations for items introduced in the latest releases, plus a consistency/quality pass across existing strings (grammar, tone, capitalization, pluralization). Placeholders and hotkeys preserved. No logic changes. * refac * i18n(th-TH): translate missing Thai keys/fix typo (open-webui#26406) * refac * refac * refac * refac * refac * refac * refac * refac * refac * fix: use updated_at for sidebar chat timestamp (open-webui#26454) The sidebar time-ago indicator rendered `created_at`, so the relative time stayed pinned to the chat's creation age and never reflected new activity. After sending a message the chat would jump to the top of the list (which sorts by `updated_at`) while still showing a stale label such as "3w", which is confusing. The indicator was originally added using `updated_at` and was inadvertently switched to `created_at` during a later refactor. Restore `updated_at` (falling back to `created_at` when absent) so the timestamp matches the list ordering and updates whenever a chat is modified. Fixes open-webui#26451 * fix: use absolute indexURL for pyodide sandbox (open-webui#26625) * i18n: fix Spanish relative time labels (open-webui#26463) * Update and fix Catalan translation.json (open-webui#26409) * refac * refac Co-Authored-By: Syed Osama Ali Shah <86572800+osamaali313@users.noreply.github.com> * refac Co-Authored-By: Syed Osama Ali Shah <86572800+osamaali313@users.noreply.github.com> * refac * refac * refac * refac * refac * refac * refac * refac * refac * refac * refac * fix: derive content from output for search (open-webui#26405) * refac * refac * refac * refac * refac * refac * refac * refac * refac * refac * Update CHANGELOG.md (open-webui#26641) * Update CHANGELOG.md * Update CHANGELOG.md --------- Co-authored-by: Tim Baek <tim@openwebui.com> --------- Co-authored-by: joaoback <156559121+joaoback@users.noreply.github.com> Co-authored-by: Sicknine <156204309+SNaytiP@users.noreply.github.com> Co-authored-by: Classic298 <27028174+Classic298@users.noreply.github.com> Co-authored-by: Algorithm5838 <108630393+Algorithm5838@users.noreply.github.com> Co-authored-by: JuanMa Diaz <torgus@gmail.com> Co-authored-by: Aleix Dorca <aleixdorca@mac.com> Co-authored-by: Syed Osama Ali Shah <86572800+osamaali313@users.noreply.github.com>
2 parents b711935 + 4b55e69 commit ecd48e2

107 files changed

Lines changed: 1655 additions & 1068 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.env.example

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ OPENAI_API_KEY=''
1313
# CORS_ALLOW_ORIGIN='http://localhost:5173;http://localhost:8080'
1414
CORS_ALLOW_ORIGIN='*'
1515

16+
# Set to false to keep memory tools enabled without adding memory context to the system context.
17+
ENABLE_MEMORY_SYSTEM_CONTEXT=true
18+
1619
# For production you should set this to match the proxy configuration (127.0.0.1)
1720
FORWARDED_ALLOW_IPS='*'
1821

.github/FUNDING.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
github: tjbck
1+
github: open-webui

CHANGELOG.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,45 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.10.2] - 2026-07-01
9+
10+
### Added
11+
12+
- 💭 **Streamed reasoning display.** Models that emit thinking or reasoning now show that content as it streams, and it renders correctly in the chat overview and in exported conversations. [Commit](https://github.com/open-webui/open-webui/commit/0b75445ff9a42e37640c034812d0de9b84039e60), [Commit](https://github.com/open-webui/open-webui/commit/af1c0eee89810fa4c36e3eb7e4eba6de685bd7ca), [Commit](https://github.com/open-webui/open-webui/commit/4b08d65597e5b634b7191b0bd6d28feeafcc2a48), [Commit](https://github.com/open-webui/open-webui/commit/fa2abe4cb6a085a4c9045bf8d8ff4b6beffdef6a)
13+
- 🗂️ **Folder uploads to knowledge bases.** Dragging a folder into a knowledge base, or syncing one, now recreates its subfolder structure instead of flattening everything into loose files. [#26130](https://github.com/open-webui/open-webui/issues/26130), [Commit](https://github.com/open-webui/open-webui/commit/2ed8934f5b2bc8a11c74ef2f34cdb62ef024809e)
14+
- 🧠 **Memory system context toggle.** Administrators can now keep memory tools available while choosing not to add stored memories to the system context, using the new 'Memory System Context' toggle in admin settings. [Commit](https://github.com/open-webui/open-webui/commit/4067e357b2ff9e2fb59866d24656e832908fb6fe)
15+
- 🧹 **Tidier automatic memories.** Automatically saved memories now focus on enduring details like preferences and goals and skip one-off things like meals, routine events, or passing mood unless you ask to remember them. [Commit](https://github.com/open-webui/open-webui/commit/80af65c24adac5140a39a2b5687a3b669b86719f)
16+
- 🎙️ **Speech-to-text request format.** OpenAI-compatible speech-to-text can now send audio as either a multipart upload or base64 JSON, selectable in admin audio settings. [Commit](https://github.com/open-webui/open-webui/commit/989c6c13f5d4c5cc255aec77aea14725104d9cb3)
17+
- 🧰 **API configs via environment.** Administrators can now set per-connection Ollama and OpenAI API configurations through the "OLLAMA_API_CONFIGS" and "OPENAI_API_CONFIGS" environment variables. [Commit](https://github.com/open-webui/open-webui/commit/19d8f03bd2c64013b510f2a0eeb3513d452814a3)
18+
- 📡 **Provider failure events.** Failed Ollama and OpenAI-compatible provider requests now emit a structured event describing the error type, provider, and status, giving administrators clearer visibility into upstream failures. [Commit](https://github.com/open-webui/open-webui/commit/4351c78b1e45bb0c5824f9d9eb911b395e343646)
19+
- 🏟️ **Arena models via environment.** Administrators can now define evaluation arena models through the "EVALUATION_ARENA_MODELS" environment variable. [#26174](https://github.com/open-webui/open-webui/issues/26174)
20+
- ♿ **Clearer high-contrast sidebar selection.** With high-contrast mode enabled, the currently selected chat in the sidebar now stands out with stronger colors, making it easier to tell which chat is active. [#26469](https://github.com/open-webui/open-webui/issues/26469), [Commit](https://github.com/open-webui/open-webui/commit/52ee5cb1b3aa8a8ad40b23d72d82db7c3522dbf8)
21+
- 🔄 **General improvements.** Various improvements were implemented across the application to enhance performance, stability, and security.
22+
- 🌐 **Translation updates.** Translations for Thai, Portuguese (Brazil), Catalan, and Spanish were enhanced and expanded.
23+
24+
### Fixed
25+
26+
- 🛡️ **Security Advisory**: This release includes security and access-control fixes. We recommend updating production deployments at your earliest convenience. Not all security fixes in this version may be enumerated in the fixed section — some may be withheld for a short time to give administrators time to upgrade. [Advisories](https://github.com/open-webui/open-webui/security)
27+
- 🔐 **Fewer unexpected logouts.** A single request returning an authorization error no longer signs you out while your session is still valid, since the app now confirms the session status before redirecting to login. [Commit](https://github.com/open-webui/open-webui/commit/56ee875e21cb3b137a5aa1eca6eb3c0731b14045)
28+
- 🔒 **Web search domain filtering.** Domain allow and block rules for web search results are now matched against the host, closing a gap where some URLs could slip past the filter. [Commit](https://github.com/open-webui/open-webui/commit/688bda09fbe26619613aa487beda8059a5fd55ef)
29+
- 🕵️ **Image prompt log privacy.** Image generation workflows are no longer written to server logs at the default log level, keeping user-authored prompt content out of operator-visible logs. [#26400](https://github.com/open-webui/open-webui/issues/26400), [Commit](https://github.com/open-webui/open-webui/commit/64b92ff08a09b1bf338d5d95b7bf6f9db0d7e857)
30+
- 🗄️ **Safer database upgrades.** Upgrading an existing SQLite database no longer crashes during the user-table migration or corrupts saved user settings, resolving failures that could block startup or break login after an upgrade. [#26403](https://github.com/open-webui/open-webui/issues/26403), [Commit](https://github.com/open-webui/open-webui/commit/c416c6cad69cc4ce44faacdad87cc65862625fb4)
31+
- ⚙️ **Saving settings as a non-admin.** Non-admin users can once again save their interface settings, such as the default model and theme, which previously failed with a server error while the interface incorrectly reported success. [#26627](https://github.com/open-webui/open-webui/issues/26627), [Commit](https://github.com/open-webui/open-webui/commit/9866a02863c12c466100aed832f0006225759493)
32+
- 🕒 **Sidebar chat timestamps.** Chats in the sidebar now show when they were last active instead of when they were created, so the time label matches their position in the list and refreshes after each new message. [#26454](https://github.com/open-webui/open-webui/pull/26454), [#26451](https://github.com/open-webui/open-webui/issues/26451)
33+
- 🎯 **Default model after refresh.** Your selected model is no longer cleared when you reload the page, as model selection now waits for the model list to finish loading. [Commit](https://github.com/open-webui/open-webui/commit/b6d4baeb7ea9bc83e5486ca98b3cae07d3869aa7)
34+
- ⏳ **Tool dialogs no longer hang.** Dismissing a tool or function input dialog by clicking outside it now cancels the pending request instead of leaving the chat spinning indefinitely. [#26417](https://github.com/open-webui/open-webui/issues/26417), [Commit](https://github.com/open-webui/open-webui/commit/0016266c0652757e32aa44f2e1fb7311ac08db51)
35+
- 🐍 **Reliable code execution loading.** Running Python code in chat now loads its runtime reliably, fixing sandbox startup failures that broke code execution and the Pyodide file viewer in recent releases. [#26625](https://github.com/open-webui/open-webui/pull/26625), [#26390](https://github.com/open-webui/open-webui/issues/26390)
36+
- 🤖 **Models with null capabilities.** Chatting with a model whose capabilities are unset no longer fails with an error when the memory feature or automations are involved. [#26412](https://github.com/open-webui/open-webui/issues/26412), [Commit](https://github.com/open-webui/open-webui/commit/650b81792582268345073ce3757ac14356189d75), [Commit](https://github.com/open-webui/open-webui/commit/0016266c0652757e32aa44f2e1fb7311ac08db51)
37+
- 🔎 **Searchable responses.** Chat search again finds assistant messages whose text is stored as structured output, which were previously skipped. [#26405](https://github.com/open-webui/open-webui/pull/26405)
38+
- 🔔 **Chat notification previews.** Background chat completion notifications and toasts now show a clean response preview instead of appearing blank for messages stored as structured output. [Commit](https://github.com/open-webui/open-webui/commit/c98d8ecaccc7284573b050e88b3857c4aeba3860)
39+
- 💾 **Banner and config startup.** Setting configuration such as "WEBUI_BANNERS" no longer causes a startup failure, since admin configuration values are now stored correctly regardless of their data type. [#26431](https://github.com/open-webui/open-webui/issues/26431), [Commit](https://github.com/open-webui/open-webui/commit/ab22fe64bdd10ba86845dcd46dfd7f619b22366f)
40+
- 📑 **RAG Template visibility.** The RAG Template editor now stays visible in admin document settings even when Bypass Embedding and Retrieval is enabled, since the template still applies to document content in that mode. [#26126](https://github.com/open-webui/open-webui/issues/26126), [Commit](https://github.com/open-webui/open-webui/commit/8fe480250f649824441a7b4d725a502683134713)
41+
- 🧬 **Editing derived models.** Editing a workspace model no longer clears its base model, including when that base is a preset or the model itself. [Commit](https://github.com/open-webui/open-webui/commit/092b5857bbda01be53619e26f42b1fa9b64a2b44), [Commit](https://github.com/open-webui/open-webui/commit/54f31c630afa75e9c81acaa048e1bd901254ba92)
42+
43+
### Changed
44+
45+
- ⚠️ **Database Migrations**: This release includes database schema changes; we strongly recommend backing up your database and all associated data before upgrading in production environments. If you are running a multi-worker, multi-server, or load-balanced deployment, all instances must be updated simultaneously, rolling updates are not supported and will cause application failures due to schema incompatibility.
46+
847
## [0.10.1] - 2026-06-29
948

1049
### Fixed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
![GitHub top language](https://img.shields.io/github/languages/top/open-webui/open-webui)
99
![GitHub last commit](https://img.shields.io/github/last-commit/open-webui/open-webui?color=red)
1010
[![Discord](https://img.shields.io/badge/Discord-Open_WebUI-blue?logo=discord&logoColor=white)](https://discord.gg/5rJgQTnV4s)
11-
[![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/tjbck)
11+
[![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/open-webui)
1212

1313
![Open WebUI Banner](./banner.png)
1414

backend/open_webui/config.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,16 @@ def reachable(host: str, port: int) -> bool:
290290
OLLAMA_BASE_URLS = OLLAMA_BASE_URLS
291291

292292
OLLAMA_API_CONFIGS = {}
293+
_ollama_api_configs = os.getenv('OLLAMA_API_CONFIGS', '')
294+
if _ollama_api_configs:
295+
try:
296+
parsed = json.loads(_ollama_api_configs)
297+
if isinstance(parsed, dict):
298+
OLLAMA_API_CONFIGS = parsed
299+
else:
300+
log.warning('OLLAMA_API_CONFIGS must be a JSON object, ignoring')
301+
except (json.JSONDecodeError, TypeError):
302+
log.warning('OLLAMA_API_CONFIGS is not valid JSON, ignoring')
293303

294304
####################################
295305
# OPENAI_API
@@ -327,6 +337,16 @@ def reachable(host: str, port: int) -> bool:
327337
OPENAI_API_BASE_URLS = OPENAI_API_BASE_URLS
328338

329339
OPENAI_API_CONFIGS = {}
340+
_openai_api_configs = os.getenv('OPENAI_API_CONFIGS', '')
341+
if _openai_api_configs:
342+
try:
343+
parsed = json.loads(_openai_api_configs)
344+
if isinstance(parsed, dict):
345+
OPENAI_API_CONFIGS = parsed
346+
else:
347+
log.warning('OPENAI_API_CONFIGS must be a JSON object, ignoring')
348+
except (json.JSONDecodeError, TypeError):
349+
log.warning('OPENAI_API_CONFIGS is not valid JSON, ignoring')
330350

331351
# Get the actual OpenAI API key based on the base URL
332352
OPENAI_API_KEY = ''
@@ -394,6 +414,7 @@ def reachable(host: str, port: int) -> bool:
394414
ENABLE_CODE_INTERPRETER = os.getenv('ENABLE_CODE_INTERPRETER', 'True').lower() == 'true'
395415

396416
ENABLE_MEMORIES = os.getenv('ENABLE_MEMORIES', 'True').lower() == 'true'
417+
ENABLE_MEMORY_SYSTEM_CONTEXT = os.getenv('ENABLE_MEMORY_SYSTEM_CONTEXT', 'True').lower() == 'true'
397418
ENABLE_MEMORY_BACKGROUND_REVIEW = os.getenv('ENABLE_MEMORY_BACKGROUND_REVIEW', 'False').lower() == 'true'
398419
MEMORIES_REVIEW_INTERVAL_TURNS = int(os.getenv('MEMORIES_REVIEW_INTERVAL_TURNS', '10'))
399420
MEMORIES_USER_CHAR_LIMIT = int(os.getenv('MEMORIES_USER_CHAR_LIMIT', '2000'))
@@ -1511,6 +1532,8 @@ def reachable(host: str, port: int) -> bool:
15111532

15121533
AUDIO_STT_OPENAI_API_KEY = os.getenv('AUDIO_STT_OPENAI_API_KEY', OPENAI_API_KEY)
15131534

1535+
AUDIO_STT_OPENAI_API_REQUEST_FORMAT = os.getenv('AUDIO_STT_OPENAI_API_REQUEST_FORMAT', 'multipart')
1536+
15141537
AUDIO_STT_ENGINE = os.getenv('AUDIO_STT_ENGINE', '')
15151538

15161539
AUDIO_STT_MODEL = os.getenv('AUDIO_STT_MODEL', '')
@@ -2741,6 +2764,7 @@ def feishu_oauth_register(oauth: OAuth):
27412764
'code_execution.jupyter.timeout': CODE_EXECUTION_JUPYTER_TIMEOUT,
27422765
'code_interpreter.enable': ENABLE_CODE_INTERPRETER,
27432766
'memories.enable': ENABLE_MEMORIES,
2767+
'memories.system_context.enable': ENABLE_MEMORY_SYSTEM_CONTEXT,
27442768
'memories.background_review.enable': ENABLE_MEMORY_BACKGROUND_REVIEW,
27452769
'memories.review_interval_turns': MEMORIES_REVIEW_INTERVAL_TURNS,
27462770
'memories.user_char_limit': MEMORIES_USER_CHAR_LIMIT,
@@ -2944,6 +2968,7 @@ def feishu_oauth_register(oauth: OAuth):
29442968
'audio.stt.deepgram.api_key': DEEPGRAM_API_KEY,
29452969
'audio.stt.openai.api_base_url': AUDIO_STT_OPENAI_API_BASE_URL,
29462970
'audio.stt.openai.api_key': AUDIO_STT_OPENAI_API_KEY,
2971+
'audio.stt.openai.api_request_format': AUDIO_STT_OPENAI_API_REQUEST_FORMAT,
29472972
'audio.stt.engine': AUDIO_STT_ENGINE,
29482973
'audio.stt.model': AUDIO_STT_MODEL,
29492974
'audio.stt.supported_content_types': AUDIO_STT_SUPPORTED_CONTENT_TYPES,

backend/open_webui/env.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -444,17 +444,16 @@ def parse_section(section):
444444

445445

446446
if WEBSOCKET_REDIS_OPTIONS == '':
447+
WEBSOCKET_REDIS_OPTIONS = {'socket_timeout': None}
447448
if REDIS_SOCKET_CONNECT_TIMEOUT:
448-
WEBSOCKET_REDIS_OPTIONS = {'socket_connect_timeout': REDIS_SOCKET_CONNECT_TIMEOUT}
449-
else:
450-
log.debug('No WEBSOCKET_REDIS_OPTIONS provided, defaulting to None')
451-
WEBSOCKET_REDIS_OPTIONS = None
449+
WEBSOCKET_REDIS_OPTIONS['socket_connect_timeout'] = REDIS_SOCKET_CONNECT_TIMEOUT
452450
else:
453451
try:
454452
WEBSOCKET_REDIS_OPTIONS = json.loads(WEBSOCKET_REDIS_OPTIONS)
453+
WEBSOCKET_REDIS_OPTIONS.setdefault('socket_timeout', None)
455454
except Exception:
456-
log.warning('Invalid WEBSOCKET_REDIS_OPTIONS, defaulting to None')
457-
WEBSOCKET_REDIS_OPTIONS = None
455+
log.warning('Invalid WEBSOCKET_REDIS_OPTIONS, defaulting to socket_timeout=None')
456+
WEBSOCKET_REDIS_OPTIONS = {'socket_timeout': None}
458457

459458
WEBSOCKET_REDIS_URL = os.getenv('WEBSOCKET_REDIS_URL', REDIS_URL)
460459
WEBSOCKET_REDIS_CLUSTER = os.getenv('WEBSOCKET_REDIS_CLUSTER', str(REDIS_CLUSTER)).lower() == 'true'

backend/open_webui/events.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,11 @@ class EventDefinitions(BaseModel):
442442
description='Model provider configuration was updated.',
443443
message='Model Provider Config updated',
444444
)
445+
MODEL_PROVIDER_REQUEST_FAILED: EventDefinition = EventDefinition(
446+
name='model.provider_request.failed',
447+
description='A model provider request failed.',
448+
message='Model provider request failed',
449+
)
445450
MODEL_PROVIDER_MODEL_CREATED: EventDefinition = EventDefinition(
446451
name='model.provider_model.created',
447452
description='A provider model was created.',
@@ -1108,3 +1113,60 @@ async def publish_event(
11081113
await sink.handle_event(app, event_payload, request=request)
11091114
except Exception:
11101115
log.exception('Event sink failed for %s', event_payload.event)
1116+
1117+
1118+
async def publish_model_provider_request_failed(
1119+
request_or_app: Any,
1120+
*,
1121+
actor: Any | None,
1122+
provider: str,
1123+
base_url: str,
1124+
status: int,
1125+
requested_model: str | None = None,
1126+
api_key: str | None = None,
1127+
upstream_error: Any = None,
1128+
) -> None:
1129+
error = upstream_error.get('error') if isinstance(upstream_error, dict) else upstream_error
1130+
error_code = None
1131+
if isinstance(error, dict):
1132+
error_code = error.get('code') or error.get('type') or error.get('error_code')
1133+
error = error.get('message') or error.get('detail') or error
1134+
1135+
error_text = str(error or '')
1136+
marker = f'{error_code or ""} {error_text}'.lower()
1137+
error_type = (
1138+
'model_not_found'
1139+
if status == 404
1140+
and any(value in marker for value in ('model_not_found', 'model not found', 'does not exist', 'no such model'))
1141+
else 'authentication_failed'
1142+
if status in (401, 403)
1143+
else 'rate_limited'
1144+
if status == 429
1145+
else 'server_failed'
1146+
if status >= 500
1147+
else 'upstream_error'
1148+
)
1149+
1150+
data = {
1151+
'error_type': error_type,
1152+
'status': status,
1153+
'provider': provider,
1154+
'base_url': base_url,
1155+
}
1156+
if requested_model:
1157+
data['requested_model'] = requested_model
1158+
if api_key:
1159+
data['api_key_suffix'] = f'...{api_key[-4:]}'
1160+
if error_code:
1161+
data['upstream_error_code'] = error_code
1162+
if error:
1163+
data['upstream_message'] = error
1164+
1165+
await publish_event(
1166+
request_or_app,
1167+
EVENTS.MODEL_PROVIDER_REQUEST_FAILED,
1168+
actor=actor,
1169+
subject_id=requested_model,
1170+
subject_type='model',
1171+
data=data,
1172+
)

backend/open_webui/main.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1341,18 +1341,26 @@ async def run_initial_title_generation():
13411341
detail=ERROR_MESSAGES.DEFAULT(),
13421342
)
13431343

1344-
# Persist chat-level files (knowledge collections, docs, etc.)
1344+
user_message = metadata.get('user_message') or {}
1345+
selected_chat_models = user_message.get('models') if isinstance(user_message, dict) else None
1346+
if not isinstance(selected_chat_models, list) or not selected_chat_models:
1347+
selected_chat_models = [entry.get('model_id') for entry in message_ids if entry.get('model_id')]
1348+
1349+
# Persist chat-level fields the frontend used to save on every message.
13451350
# The old frontend saveChatHandler did this on every message;
13461351
# now the backend owns persistence.
13471352
chat_files = metadata.get('files')
1348-
if chat_files is not None:
1353+
if chat_files is not None or selected_chat_models:
13491354
existing_chat = await Chats.get_chat_by_id(chat_id)
13501355
if existing_chat:
1351-
updated = {**existing_chat.chat, 'files': chat_files}
1356+
updated = {**existing_chat.chat}
1357+
if chat_files is not None:
1358+
updated['files'] = chat_files
1359+
if selected_chat_models:
1360+
updated['models'] = selected_chat_models
13521361
await Chats.update_chat_by_id(chat_id, updated)
13531362

13541363
# Save user message to DB
1355-
user_message = metadata.get('user_message') or {}
13561364
if user_message and user_message.get('id'):
13571365
await Chats.upsert_message_to_chat_by_id_and_message_id(
13581366
chat_id,

0 commit comments

Comments
 (0)