_explicitly extract text blocks from AIMessage.content lists instead of
falling through to str() repr when .text is unavailable, preventing
garbage summary strings like "[{'type': 'text', ...}]" from reaching the
LLM. Adds parametrized regression tests for string, multi-block,
mixed reasoning/text, empty, and non-AIMessage responses.
* fix(memory): isolate queued memory updates by agent
* fix(memory): include user in queue identity
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Fix the lint error
---------
Co-authored-by: Willem Jiang <willem.jiang@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Fixes#2804
The useStream hook tracks messages-tuple mode which captures ALL LLM
events, including the internal summarization LLM call. This caused the
English summary text to briefly appear as an AI message in the UI before
the REMOVE_ALL_MESSAGES state update replaced it.
Fix by overriding _create_summary/_acreate_summary to pass callbacks=[]
when invoking the summary model, preventing LangGraph from forwarding
the internal LLM events to the frontend stream. Also add
hide_from_ui=True to the summary HumanMessage's additional_kwargs as a
belt-and-suspenders safety net alongside the existing name=summary
check.