agentscope-ai/agentscope · error · ValueError

Cannot find group ' ' in toolkit, only are available.

Error message

Cannot find group '{group_name}' in toolkit, only {[_.name for _ in self.tool_groups]} are available.

What it means

Toolkit.add_tool raises ValueError when the group_name argument does not match any registered tool group. The error lists the available group names so you can see what the toolkit actually knows about.

Solutions

  1. Use one of the group names printed in the error message
  2. Create the group first: add a ToolGroup(name='X', tools=[]) to the Toolkit before add_tool
  3. Guard by checking `[g.name for g in toolkit.tool_groups]` before calling add_tool

Example fix

# before
await toolkit.add_tool(mem_tool, group_name='memory')  # group doesn't exist
# after
toolkit = Toolkit(tool_groups=[ToolGroup(name='memory', tools=[]), ...])
await toolkit.add_tool(mem_tool, group_name='memory')
Defensive patterns

Strategy: validation

Validate before calling

available = [g.name for g in toolkit.tool_groups]
if group_name not in available:
    group_name = available[0]  # or raise with a clear message
await toolkit.add_tool(tool, group_name=group_name)

Try / catch

try:
    await toolkit.add_tool(tool, group_name=group_name)
except ValueError as e:
    # parse available names from e and retry with a valid group

Prevention

When it happens

Trigger: Calling await toolkit.add_tool(tool, group_name='X') where 'X' is not among [g.name for g in toolkit.tool_groups]; e.g. 'search' when only a 'default' group exists.

Common situations: Agents adding tools on the fly (e.g. memory tools in ReAct flows) targeting a group name that was never created; typos or case mismatches in group names; assuming a default group name exists when a custom set was passed.

Related errors


AI-assisted analysis of agentscope-ai/agentscope@e90f1c7592 (2026-08-28). Data as JSON: /api/errors/ed83411e7acfad2a. Report an issue: GitHub.

Appendix: source

Thrown at src/agentscope/tool/_toolkit.py:673

                for new_tool in new_tools:
                    if new_tool.name in existing_tools:
                        logger.warning(
                            "Duplicate tool name '%s' found in group '%s', "
                            "overwriting it.",
                            new_tool.name,
                            group.name,
                        )
                        # override the existing tool
                        group.tools = [
                            t for t in group.tools if t.name != new_tool.name
                        ] + [new_tool]
                    else:
                        group.tools.append(new_tool)
                        existing_tools.add(new_tool.name)

                return

        raise ValueError(
            f"Cannot find group '{group_name}' in toolkit, only "
            f"{[_.name for _ in self.tool_groups]} are available.",
        )

    async def remove_tool(self, tool_name: str | list[str]) -> None:
        """Remove tool from the toolkit on-the-fly.

        Args:
            tool_name (`str | list[str]`):
                The name of the tool to be removed.
        """
        if isinstance(tool_name, str):
            tool_name = [tool_name]

        for group in self.tool_groups:
            group.tools = [
                tool for tool in group.tools if tool.name not in tool_name
            ]

View on GitHub (pinned to e90f1c7592)