diff --git a/chatkit/server.py b/chatkit/server.py index a94764c..a9630a3 100644 --- a/chatkit/server.py +++ b/chatkit/server.py @@ -158,9 +158,12 @@ def recurse(component: WidgetComponent | WidgetRoot): components[component.id] = component if hasattr(component, "children"): - children = getattr(component, "children", None) or [] - for child in children: - recurse(child) + children = getattr(component, "children", None) + if isinstance(children, WidgetComponentBase): + recurse(children) + elif isinstance(children, list): + for child in children: + recurse(child) recurse(component) return components diff --git a/tests/test_widgets.py b/tests/test_widgets.py index f10d53f..3eabfba 100644 --- a/tests/test_widgets.py +++ b/tests/test_widgets.py @@ -113,6 +113,28 @@ ), ["widget.root.updated"], ), + # DynamicWidgetRoot with a single-child object + ( + DynamicWidgetRoot( + type="Card", + children=DynamicWidgetComponent.model_validate({ + "type": "Text", + "id": "text", + "value": "Hello", + "streaming": True, + }), + ), + DynamicWidgetRoot( + type="Card", + children=DynamicWidgetComponent.model_validate({ + "type": "Text", + "id": "text", + "value": "Hello, world!", + "streaming": True, + }), + ), + ["widget.streaming_text.value_delta"], + ), ], ) def test_diff(