Skip to content

Commit 2388090

Browse files
wukathcopybara-github
authored andcommitted
chore: Remove experimental tag from SkillToolset
Co-authored-by: Kathy Wu <wukathy@google.com> PiperOrigin-RevId: 916198410
1 parent 7e61b51 commit 2388090

4 files changed

Lines changed: 3 additions & 35 deletions

File tree

src/google/adk/features/_feature_registry.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ class FeatureConfig:
150150
FeatureStage.EXPERIMENTAL, default_on=True
151151
),
152152
FeatureName.SKILL_TOOLSET: FeatureConfig(
153-
FeatureStage.EXPERIMENTAL, default_on=True
153+
FeatureStage.STABLE, default_on=True
154154
),
155155
FeatureName.SPANNER_ADMIN_TOOLSET: FeatureConfig(
156156
FeatureStage.EXPERIMENTAL, default_on=True

src/google/adk/tools/bash_tool.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929

3030
from google.genai import types
3131

32-
from .. import features
3332
from .base_tool import BaseTool
3433
from .tool_context import ToolContext
3534

@@ -99,7 +98,6 @@ def _set_resource_limits(policy: BashToolPolicy) -> None:
9998
logger.warning("Failed to set resource limits: %s", e)
10099

101100

102-
@features.experimental(features.FeatureName.SKILL_TOOLSET)
103101
class ExecuteBashTool(BaseTool):
104102
"""Tool to execute a validated bash command within a workspace directory."""
105103

src/google/adk/tools/skill_toolset.py

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,13 @@
2525
import mimetypes
2626
from typing import Any
2727
from typing import TYPE_CHECKING
28-
import warnings
2928

3029
from google.genai import types
3130
from typing_extensions import override
3231

3332
from ..agents.readonly_context import ReadonlyContext
3433
from ..code_executors.base_code_executor import BaseCodeExecutor
3534
from ..code_executors.code_execution_utils import CodeExecutionInput
36-
from ..features import experimental
37-
from ..features import FeatureName
3835
from ..skills import models
3936
from ..skills import prompt
4037
from ..skills import SkillRegistry
@@ -58,7 +55,7 @@
5855
" conversation history for you to analyze."
5956
)
6057

61-
_DEFAULT_SKILL_SYSTEM_INSTRUCTION = (
58+
DEFAULT_SKILL_SYSTEM_INSTRUCTION = (
6259
"You can use specialized 'skills' to help you with complex tasks. "
6360
"You MUST use the skill tools to interact with these skills.\n\n"
6461
"Skills are folders of instructions and resources that extend your "
@@ -88,7 +85,6 @@
8885
)
8986

9087

91-
@experimental(FeatureName.SKILL_TOOLSET)
9288
class ListSkillsTool(BaseTool):
9389
"""Tool to list all available skills."""
9490

@@ -118,7 +114,6 @@ async def run_async(
118114
return prompt.format_skills_as_xml(skills)
119115

120116

121-
@experimental(FeatureName.SKILL_TOOLSET)
122117
class SearchSkillsTool(BaseTool):
123118
"""Tool to search for relevant skills in the registry."""
124119

@@ -181,7 +176,6 @@ async def run_async(
181176
}
182177

183178

184-
@experimental(FeatureName.SKILL_TOOLSET)
185179
class LoadSkillTool(BaseTool):
186180
"""Tool to load a skill's instructions."""
187181

@@ -250,7 +244,6 @@ async def run_async(
250244
}
251245

252246

253-
@experimental(FeatureName.SKILL_TOOLSET)
254247
class LoadSkillResourceTool(BaseTool):
255248
"""Tool to load resources (references, assets, or scripts) from a skill."""
256249

@@ -710,7 +703,6 @@ def _build_wrapper_code(
710703
return "\n".join(code_lines)
711704

712705

713-
@experimental(FeatureName.SKILL_TOOLSET)
714706
class RunSkillScriptTool(BaseTool):
715707
"""Tool to execute scripts from a skill's scripts/ directory."""
716708

@@ -874,7 +866,6 @@ async def run_async(
874866
)
875867

876868

877-
@experimental(FeatureName.SKILL_TOOLSET)
878869
class SkillToolset(BaseToolset):
879870
"""A toolset for managing and interacting with agent skills."""
880871

@@ -1063,7 +1054,7 @@ async def process_llm_request(
10631054
self, *, tool_context: ToolContext, llm_request: LlmRequest
10641055
) -> None:
10651056
"""Processes the outgoing LLM request to include available skills."""
1066-
instructions = [_DEFAULT_SKILL_SYSTEM_INSTRUCTION]
1057+
instructions = [DEFAULT_SKILL_SYSTEM_INSTRUCTION]
10671058

10681059
has_list_skills = any(isinstance(t, ListSkillsTool) for t in self._tools)
10691060

@@ -1090,16 +1081,3 @@ async def close(self) -> None:
10901081
cached.cancel()
10911082
self._fetched_skill_cache.clear()
10921083
await super().close()
1093-
1094-
1095-
def __getattr__(name: str) -> Any:
1096-
if name == "DEFAULT_SKILL_SYSTEM_INSTRUCTION":
1097-
warnings.warn(
1098-
"DEFAULT_SKILL_SYSTEM_INSTRUCTION is experimental. Its content "
1099-
"is internal implementation and will change in minor/patch releases "
1100-
"to tune agent performance.",
1101-
UserWarning,
1102-
stacklevel=2,
1103-
)
1104-
return _DEFAULT_SKILL_SYSTEM_INSTRUCTION
1105-
raise AttributeError(f"module {__name__} has no attribute {name}")

tests/unittests/tools/test_skill_toolset.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -471,14 +471,6 @@ async def test_process_llm_request_without_list_skills_tool(
471471
assert "skill2" in instructions[1]
472472

473473

474-
def test_default_skill_system_instruction_warning():
475-
with pytest.warns(
476-
UserWarning, match="DEFAULT_SKILL_SYSTEM_INSTRUCTION is experimental"
477-
):
478-
instruction = skill_toolset.DEFAULT_SKILL_SYSTEM_INSTRUCTION
479-
assert "specialized 'skills'" in instruction
480-
481-
482474
def test_duplicate_skill_name_raises(mock_skill1):
483475
skill_dup = mock.create_autospec(models.Skill, instance=True)
484476
skill_dup.name = "skill1"

0 commit comments

Comments
 (0)