Research path
Plan bounded research tasks, run independent searches together, and build dependent findings from saved evidence. Live search supports Tavily or Parallel. The planner rejects cycles, missing dependencies and tasks beyond its budget.
Capabilities
| Capability | Kind | Signature | Module | Summary |
|---|---|---|---|---|
create_research_plan | traversal | (research_question: str, max_depth: int = 1, max_tasks_per_level: int = 2) -> dict | examples/python/research_path/main.py | |
execute_deep_research | traversal | (research_question: str, max_depth: int = 1, max_tasks_per_level: int = 2) -> dict | examples/python/research_path/main.py | |
execute_research_task | traversal | (task: dict, dependencies: list[dict] | None = None) -> dict | examples/python/research_path/main.py |
Commands
EXAMPLE_MODE=fixture python -m atfgraph.worker --module examples.python.research_path.main:app
atfg install ./examples/python/research_path
atfg run research_path
atfg server start
atfg traverse research_path.execute_deep_research --in '{"research_question": "How does vector retrieval work?", "max_depth": 1, "max_tasks_per_level": 2}'
python -m examples.python.research_path.call
Files
examples/python/research_path/README.mdexamples/python/research_path/__init__.pyexamples/python/research_path/agentnode.yamlexamples/python/research_path/call.pyexamples/python/research_path/main.pyexamples/python/research_path/node.pyexamples/python/research_path/requirements.txtexamples/python/research_path/support.py
README
Plan bounded research tasks, run independent searches together, and build dependent findings from saved evidence. Live search supports Tavily or Parallel. The planner rejects cycles, missing dependencies and tasks beyond its budget.
Run locally
With the SDK installed, run from the repository root:
atfg server start
EXAMPLE_MODE=fixture python -m atfgraph.worker --module examples.python.research_path.main:app
# In a second terminal:
python -m examples.python.research_path.call
Or install this folder as a managed node:
atfg install ./examples/python/research_path
atfg run research_path
node.py also runs from a copied project folder. Default server: http://127.0.0.1:18880. Inspect child work in its /ui/ Console.
Call with the CLI
atfg traverse research_path.execute_deep_research --in '{"research_question": "How does vector retrieval work?", "max_depth": 1, "max_tasks_per_level": 2}'
Providers
Default fixture mode uses deterministic local data without external model/search calls. It validates the orchestration flow rather than research quality.
For live decisions, set EXAMPLE_MODE=live, model URL/name and any required API key before starting the worker. Missing configuration and provider errors remain visible instead of switching to fixtures.
Python client
from atfgraph import Client
async with Client("http://127.0.0.1:18880") as client:
result = await client.traverse(
"research_path.execute_deep_research",
{'research_question': 'How does vector retrieval work?', 'max_depth': 1, 'max_tasks_per_level': 2},
timeout=300,
)
print(result)
For live search, select Tavily with SEARCH_PROVIDER=tavily/TAVILY_API_KEY, or Parallel with SEARCH_PROVIDER=parallel/PARALLEL_API_KEY. Endpoint overrides support gateways and tests. Each independent task gets at most five results, with depth 0–2 and 1–4 tasks per depth. Dependent tasks reuse evidence rather than issuing another search. fixture:// citations identify synthetic material, not real web pages.