e4dcfc49aa
Tests / Import Check (Python 3.13) (push) Has been cancelled
Tests / Import Check (Python 3.14) (push) Has been cancelled
Tests / Python Tests (Python 3.11) (push) Has been cancelled
Tests / Python Tests (Python 3.12) (push) Has been cancelled
Tests / Python Tests (Python 3.14) (push) Has been cancelled
Tests / Test Summary (push) Has been cancelled
Tests / Lint and Format (push) Has been cancelled
Tests / Web Node Tests (push) Has been cancelled
Tests / Import Check (Python 3.11) (push) Has been cancelled
Tests / Import Check (Python 3.12) (push) Has been cancelled
Tests / Python Tests (Python 3.13) (push) Has been cancelled
92 lines
3.3 KiB
Python
92 lines
3.3 KiB
Python
"""Tests for the research request-config helpers.
|
|
|
|
The legacy multi-agent prompt manifests (rephrase_agent.yaml,
|
|
decompose_agent.yaml, research_agent.yaml, note_agent.yaml,
|
|
reporting_agent.yaml) were deleted in the agentic-loop refactor. The
|
|
``sources`` knob was retired alongside them — tool composition now
|
|
goes through ``compose_enabled_tools`` like chat, driven by the user's
|
|
composer toggles plus the attached KB (auto-mounted as ``rag``). What
|
|
remains is coverage for the public ``request_config`` helpers that
|
|
drive runtime composition.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from deeptutor.agents.research.request_config import (
|
|
build_research_execution_policy,
|
|
build_research_runtime_config,
|
|
validate_research_request_config,
|
|
)
|
|
|
|
|
|
def test_validate_research_request_config_accepts_minimal_payload() -> None:
|
|
request = validate_research_request_config(
|
|
{
|
|
"mode": "notes",
|
|
"depth": "quick",
|
|
}
|
|
)
|
|
|
|
assert request.mode == "notes"
|
|
assert request.depth == "quick"
|
|
|
|
|
|
def test_build_research_execution_policy_maps_intent_to_internal_settings() -> None:
|
|
request = validate_research_request_config(
|
|
{
|
|
"mode": "comparison",
|
|
"depth": "deep",
|
|
}
|
|
)
|
|
policy = build_research_execution_policy(request_config=request)
|
|
|
|
assert policy["planning"]["rephrase"]["enabled"] is True
|
|
assert policy["planning"]["decompose"]["mode"] == "manual"
|
|
assert policy["researching"]["execution_mode"] == "parallel"
|
|
# Source-derived enable_* flags were removed: tool composition is
|
|
# delegated to the shared ``compose_enabled_tools`` policy at runtime.
|
|
assert "enable_rag" not in policy["researching"]
|
|
assert "enable_web_search" not in policy["researching"]
|
|
assert "enable_paper_search" not in policy["researching"]
|
|
assert "enable_run_code" not in policy["researching"]
|
|
assert "enabled_tools" not in policy["researching"]
|
|
assert policy["reporting"]["style"] == "comparison"
|
|
assert policy["queue"]["max_length"] == 8
|
|
|
|
|
|
def test_build_research_runtime_config_carries_intent_without_sources() -> None:
|
|
request = validate_research_request_config(
|
|
{
|
|
"mode": "learning_path",
|
|
"depth": "standard",
|
|
}
|
|
)
|
|
|
|
runtime = build_research_runtime_config(
|
|
base_config={
|
|
"research": {
|
|
"researching": {
|
|
"note_agent_mode": "auto",
|
|
"tool_timeout": 60,
|
|
"tool_max_retries": 2,
|
|
"paper_search_years_limit": 3,
|
|
},
|
|
"rag": {"default_mode": "hybrid"},
|
|
},
|
|
},
|
|
request_config=request,
|
|
kb_name="research-kb",
|
|
)
|
|
|
|
assert runtime["planning"]["decompose"]["mode"] == "auto"
|
|
assert runtime["planning"]["decompose"]["auto_max_subtopics"] == 4
|
|
assert runtime["researching"]["max_iterations"] == 3
|
|
assert runtime["researching"]["execution_mode"] == "series"
|
|
assert runtime["reporting"]["style"] == "learning_path"
|
|
assert runtime["queue"]["max_length"] == 5
|
|
assert runtime["rag"]["kb_name"] == "research-kb"
|
|
assert runtime["intent"]["mode"] == "learning_path"
|
|
assert runtime["intent"]["depth"] == "standard"
|
|
assert "sources" not in runtime["intent"]
|
|
assert "tools" not in runtime # no source-derived tools overrides
|