From 31c3eb16172b759be9ffa4bc97cad2664b776d86 Mon Sep 17 00:00:00 2001 From: hanli <37435717+hnl1@users.noreply.github.com> Date: Thu, 7 May 2026 14:51:05 +0800 Subject: [PATCH] Fix cached UI history without client id --- execution.py | 5 +- tests-unit/execution_test/test_cached_ui.py | 53 +++++++++++++++++++++ 2 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 tests-unit/execution_test/test_cached_ui.py diff --git a/execution.py b/execution.py index f37d0360d..1d721fc0b 100644 --- a/execution.py +++ b/execution.py @@ -418,12 +418,11 @@ def _is_intermediate_output(dynprompt, node_id): return getattr(class_def, 'HAS_INTERMEDIATE_OUTPUT', False) def _send_cached_ui(server, node_id, display_node_id, cached, prompt_id, ui_outputs): - if server.client_id is None: - return cached_ui = cached.ui or {} - server.send_sync("executed", { "node": node_id, "display_node": display_node_id, "output": cached_ui.get("output", None), "prompt_id": prompt_id }, server.client_id) if cached.ui is not None: ui_outputs[node_id] = cached.ui + if server.client_id is not None: + server.send_sync("executed", { "node": node_id, "display_node": display_node_id, "output": cached_ui.get("output", None), "prompt_id": prompt_id }, server.client_id) async def execute(server, dynprompt, caches, current_item, extra_data, executed, prompt_id, execution_list, pending_subgraph_results, pending_async_nodes, ui_outputs): unique_id = current_item diff --git a/tests-unit/execution_test/test_cached_ui.py b/tests-unit/execution_test/test_cached_ui.py new file mode 100644 index 000000000..2ec1e73de --- /dev/null +++ b/tests-unit/execution_test/test_cached_ui.py @@ -0,0 +1,53 @@ +from types import SimpleNamespace + +from execution import _send_cached_ui + + +class FakeServer: + def __init__(self, client_id=None): + self.client_id = client_id + self.sent = [] + + def send_sync(self, event, data, client_id): + self.sent.append((event, data, client_id)) + + +def test_cached_ui_populates_outputs_without_client_id(): + cached_ui = { + "meta": {"node_id": "1"}, + "output": {"images": [{"filename": "cached.png"}]}, + } + cached = SimpleNamespace(ui=cached_ui) + server = FakeServer(client_id=None) + ui_outputs = {} + + _send_cached_ui(server, "1", "1", cached, "prompt-id", ui_outputs) + + assert ui_outputs == {"1": cached_ui} + assert server.sent == [] + + +def test_cached_ui_sends_executed_event_with_client_id(): + cached_ui = { + "meta": {"node_id": "1"}, + "output": {"images": [{"filename": "cached.png"}]}, + } + cached = SimpleNamespace(ui=cached_ui) + server = FakeServer(client_id="client-id") + ui_outputs = {} + + _send_cached_ui(server, "1", "display-1", cached, "prompt-id", ui_outputs) + + assert ui_outputs == {"1": cached_ui} + assert server.sent == [ + ( + "executed", + { + "node": "1", + "display_node": "display-1", + "output": cached_ui["output"], + "prompt_id": "prompt-id", + }, + "client-id", + ) + ]