From 857798ff2f349c430dd1b6a36659a5a242e120a6 Mon Sep 17 00:00:00 2001 From: xuhd Date: Wed, 3 Jun 2026 17:11:18 +0800 Subject: [PATCH] fix(skill-review): pass RunnableConfig with thread_id to satisfy ThreadDataMiddleware --- .../packages/harness/deerflow/skills/review_worker.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/offline-backend-20260512/backend/packages/harness/deerflow/skills/review_worker.py b/offline-backend-20260512/backend/packages/harness/deerflow/skills/review_worker.py index aebc67c4..dc485ff9 100644 --- a/offline-backend-20260512/backend/packages/harness/deerflow/skills/review_worker.py +++ b/offline-backend-20260512/backend/packages/harness/deerflow/skills/review_worker.py @@ -136,6 +136,7 @@ async def _run_review(thread_id: str, messages: list[BaseMessage], app_config: " """ from langchain.agents import create_agent from langchain_core.messages import HumanMessage + from langchain_core.runnables import RunnableConfig from deerflow.agents.lead_agent.prompt import apply_prompt_template from deerflow.agents.middlewares.prompt_prefix_middleware import PromptPrefixMiddleware @@ -182,6 +183,9 @@ async def _run_review(thread_id: str, messages: list[BaseMessage], app_config: " state_schema=ThreadState, ) + # RunnableConfig supplies thread_id so ThreadDataMiddleware is satisfied. + run_config = RunnableConfig(configurable={"thread_id": f"__skill-review__{thread_id}"}) + # Review instructions arrive as prompt_prefix: PromptPrefixMiddleware prepends # them before every model call without persisting them to state. first_message = HumanMessage( @@ -196,7 +200,7 @@ async def _run_review(thread_id: str, messages: list[BaseMessage], app_config: " result = await asyncio.wait_for( asyncio.get_event_loop().run_in_executor( None, - lambda: agent.invoke({"messages": [first_message]}), + lambda: agent.invoke({"messages": [first_message]}, config=run_config), ), timeout=timeout, )