Skip to content

Commit 737b2c8

Browse files
committed
Fix GraphConfigLoader to handle nested config top-level key requirements
- Wrap agent configs in 'agent:' key when loading graph nodes - Wrap swarm configs in 'swarm:' key when loading graph nodes - Wrap graph configs in 'graph:' key when loading nested graphs - Fixes compatibility with ConfigLoader top-level key requirements - Resolves graph loading errors in configuration-driven systems Fixes issue where graph nodes failed to load with: 'Configuration must contain a top-level agent/swarm/graph key'
1 parent 73ad2cc commit 737b2c8

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

src/strands/experimental/config_loader/graph/graph_config_loader.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -214,8 +214,10 @@ def _load_nodes(self, nodes_config: List[Dict[str, Any]]) -> Dict[str, GraphNode
214214
if node_type == "agent":
215215
if "config" in node_config:
216216
# Load agent from configuration
217+
# Wrap the agent config in the required top-level 'agent' key
217218
agent_loader = self._get_agent_config_loader()
218-
agent = agent_loader.load_agent(node_config["config"])
219+
wrapped_agent_config = {"agent": node_config["config"]}
220+
agent = agent_loader.load_agent(wrapped_agent_config)
219221
elif "reference" in node_config:
220222
# Load agent from reference (string identifier)
221223
agent = self._load_agent_reference(node_config["reference"])
@@ -227,8 +229,10 @@ def _load_nodes(self, nodes_config: List[Dict[str, Any]]) -> Dict[str, GraphNode
227229
elif node_type == "swarm":
228230
if "config" in node_config:
229231
# Load swarm from configuration
232+
# Wrap the swarm config in the required top-level 'swarm' key
230233
swarm_loader = self._get_swarm_config_loader()
231-
swarm = swarm_loader.load_swarm(node_config["config"])
234+
wrapped_swarm_config = {"swarm": node_config["config"]}
235+
swarm = swarm_loader.load_swarm(wrapped_swarm_config)
232236
elif "reference" in node_config:
233237
# Load swarm from reference
234238
swarm = self._load_swarm_reference(node_config["reference"])
@@ -240,7 +244,9 @@ def _load_nodes(self, nodes_config: List[Dict[str, Any]]) -> Dict[str, GraphNode
240244
elif node_type == "graph":
241245
if "config" in node_config:
242246
# Recursive graph loading
243-
sub_graph = self.load_graph(node_config["config"])
247+
# Wrap the graph config in the required top-level 'graph' key
248+
wrapped_graph_config = {"graph": node_config["config"]}
249+
sub_graph = self.load_graph(wrapped_graph_config)
244250
elif "reference" in node_config:
245251
# Load graph from reference
246252
sub_graph = self._load_graph_reference(node_config["reference"])

0 commit comments

Comments
 (0)