代码提交
This commit is contained in:
1 parent
007ed5a7de
commit
babc5e95c6
21 files changed
+1170
-145
No files matched your search
+22
-8
@@ -5,7 +5,12 @@ from langchain.agents.middleware import AgentMiddleware
|
||||
from langchain_core.runnables import RunnableConfig
|
||||
|
||||
from deerflow.agents.lead_agent.prompt import apply_prompt_template
|
||||
from deerflow.agents.middlewares.clarification_middleware import ClarificationMiddleware
|
||||
from deerflow.agents.middlewares.clarification_middleware import ClarificationMiddleware
|
||||
from deerflow.agents.middlewares.forced_research_middleware import (
|
||||
FORCED_RESEARCH_AGENT_ID,
|
||||
ForcedResearchMiddleware,
|
||||
filter_forced_research_tools,
|
||||
)
|
||||
from deerflow.agents.middlewares.loop_detection_middleware import LoopDetectionMiddleware
|
||||
from deerflow.agents.middlewares.memory_middleware import MemoryMiddleware
|
||||
from deerflow.agents.middlewares.prompt_prefix_middleware import PromptPrefixMiddleware
|
||||
@@ -368,14 +373,21 @@ def _build_middlewares(
|
||||
|
||||
middlewares.append(SkillReviewMiddleware())
|
||||
|
||||
# PositionArtifactCapMiddleware — position-roundtable seats (and summary)
|
||||
# PositionArtifactCapMiddleware — position-roundtable seats (and summary)
|
||||
# may only emit N outputs write_file calls per user turn. Action-plan skips
|
||||
# the context flag so it can still write report + JSON.
|
||||
from deerflow.agents.middlewares.position_artifact_cap_middleware import PositionArtifactCapMiddleware
|
||||
|
||||
middlewares.append(PositionArtifactCapMiddleware())
|
||||
|
||||
# LoopDetectionMiddleware — detect and break repetitive tool call loops
|
||||
middlewares.append(PositionArtifactCapMiddleware())
|
||||
|
||||
# The built-in forced-research responder has a hard per-turn collection
|
||||
# gate plus temporary-Python-only sandbox IO. This is runtime enforcement,
|
||||
# not merely SOUL prompt steering, so weak models cannot answer before a
|
||||
# successful retrieval/skill-script result exists.
|
||||
if agent_name == FORCED_RESEARCH_AGENT_ID:
|
||||
middlewares.append(ForcedResearchMiddleware())
|
||||
|
||||
# LoopDetectionMiddleware — detect and break repetitive tool call loops
|
||||
middlewares.append(LoopDetectionMiddleware())
|
||||
|
||||
# Inject custom middlewares before ClarificationMiddleware
|
||||
@@ -626,14 +638,16 @@ def _make_lead_agent(config: RunnableConfig, *, app_config: AppConfig):
|
||||
# Default lead agent (unchanged behavior)
|
||||
is_notebook_mode = bool(cfg.get("notebook_search_space_id"))
|
||||
notebook_source_ids: list[int] = cfg.get("notebook_source_ids") or []
|
||||
default_tools = get_available_tools(
|
||||
default_tools = get_available_tools(
|
||||
model_name=model_name,
|
||||
groups=agent_config.tool_groups if agent_config else None,
|
||||
subagent_enabled=subagent_enabled,
|
||||
is_scheduled_run=cfg.get("is_scheduled_run", False),
|
||||
excluded_tools=requested_excluded_tools,
|
||||
app_config=resolved_app_config,
|
||||
)
|
||||
app_config=resolved_app_config,
|
||||
)
|
||||
if agent_id == FORCED_RESEARCH_AGENT_ID:
|
||||
default_tools = filter_forced_research_tools(default_tools)
|
||||
if is_notebook_mode:
|
||||
from deerflow.tools.builtins.notebook_search_tool import notebook_search_tool
|
||||
|
||||
|
||||
Reference in new issue
Block a user