Source code for pydantic_ai_toolsets.toolsets._shared.aliasing

"""Dynamic toolset aliasing using official pydantic-ai API."""

from __future__ import annotations

from typing import Any

from pydantic_ai.toolsets import AbstractToolset


[docs] def get_prefix_for_toolset(toolset_id: str | None, toolset_label: str | None = None) -> str: """Get the prefix for a toolset based on its ID or label. Args: toolset_id: Optional toolset ID (e.g., "cot", "tot", "self_ask") toolset_label: Optional toolset label/name Returns: Prefix string (e.g., "cot_", "tot_", "self_ask_") Example: ```python prefix = get_prefix_for_toolset("cot") # Returns "cot_" prefix = get_prefix_for_toolset("self_ask") # Returns "self_ask_" ``` """ # Normalize toolset identifier identifier = toolset_id or toolset_label or "" identifier = identifier.lower().strip() # Prefix mapping for all toolsets prefix_map: dict[str, str] = { # Reasoning toolsets "cot": "cot_", "chain_of_thought": "cot_", "chain_of_thought_reasoning": "cot_", "tot": "tot_", "tree_of_thought": "tot_", "tree_of_thought_reasoning": "tot_", "got": "got_", "graph_of_thought": "got_", "graph_of_thought_reasoning": "got_", "mcts": "mcts_", "monte_carlo": "mcts_", "monte_carlo_reasoning": "mcts_", "beam": "beam_", "beam_search": "beam_", "beam_search_reasoning": "beam_", # Reflection/refinement toolsets "reflection": "reflection_", "self_refine": "self_refine_", "self_ask": "self_ask_", # Multi-agent toolsets "persona": "persona_", "multi_persona": "persona_", "multi_persona_analysis": "persona_", "persona_debate": "persona_debate_", "multi_persona_debate": "persona_debate_", # Utility toolsets "search": "search_", "todo": "todo_", "to_do": "todo_", } # Return mapped prefix or default to identifier + "_" return prefix_map.get(identifier, f"{identifier}_" if identifier else "")
[docs] def create_aliased_toolset( base_toolset: AbstractToolset[Any], prefix: str, ) -> AbstractToolset[Any]: """Create an aliased version of a toolset with prefixed tool names. Uses the official pydantic-ai API: AbstractToolset.prefixed() This function wraps a toolset and prefixes all its tool names to avoid collisions when combining multiple toolsets. Args: base_toolset: The original toolset to alias (unchanged) prefix: Prefix to add to all tool names (e.g., "cot_", "tot_") Returns: PrefixedToolset with aliased tool names Example: ```python from pydantic_ai_toolsets import create_cot_toolset cot_toolset = create_cot_toolset() aliased_cot = create_aliased_toolset(cot_toolset, "cot_") # Tools are now: cot_read_thoughts, cot_write_thoughts ``` Note: - The original toolset is NOT modified - All tool names are prefixed (even if no collision exists) - System prompts remain unchanged (handled separately) """ if not prefix: return base_toolset # Use official API method - no introspection needed! return base_toolset.prefixed(prefix)