mirror of
https://github.com/open-webui/open-webui.git
synced 2026-08-03 14:40:48 -05:00
fix: persist filter outlet() changes to structured message output (#27414)
When a filter's outlet() modified the structured assistant output in place, the change was shown immediately but lost after reload. outlet_filter_handler built its outlet payload with a shallow reference to the message's output list from messages_map, so the filter mutated the stored baseline itself and the subsequent output comparison compared the object against itself, never detecting a change and never persisting it. The same aliasing corrupted originalContent for messages whose text lives only in output. Deepcopy the output when building the outlet payload so messages_map stays a pristine pre-filter baseline and the existing change detection persists outlet-modified output through the existing upsert path. Fixes #27017.
This commit is contained in:
@@ -3424,7 +3424,8 @@ async def outlet_filter_handler(ctx):
|
||||
'content': m.get('content') or get_output_text(m.get('output')),
|
||||
'info': m.get('info'),
|
||||
'timestamp': m.get('timestamp'),
|
||||
**({'output': m['output']} if m.get('output') else {}),
|
||||
# Deepcopy so in-place filter mutations do not alias messages_map's baseline
|
||||
**({'output': copy.deepcopy(m['output'])} if m.get('output') else {}),
|
||||
**({'usage': m['usage']} if m.get('usage') else {}),
|
||||
**({'sources': m['sources']} if m.get('sources') else {}),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user