# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Example agent demonstrating the use of SkillToolset.""" import pathlib from google.adk import Agent from google.adk.code_executors.unsafe_local_code_executor import UnsafeLocalCodeExecutor from google.adk.skills import load_skill_from_dir from google.adk.skills import models from google.adk.tools.base_tool import BaseTool from google.adk.tools.skill_toolset import SkillToolset from google.genai import types class GetTimezoneTool(BaseTool): """A tool to get the timezone for a given location.""" def __init__(self): super().__init__( name="get_timezone", description="Returns the timezone for a given location.", ) def _get_declaration(self) -> types.FunctionDeclaration | None: return types.FunctionDeclaration( name=self.name, description=self.description, parameters_json_schema={ "type": "object", "properties": { "location": { "type": "string", "description": "The location to get the timezone for.", }, }, "required": ["location"], }, ) async def run_async(self, *, args: dict, tool_context) -> str: return f"The timezone for {args['location']} is UTC+00:00." def get_wind_speed(location: str) -> str: """Returns the current wind speed for a given location.""" return f"The wind speed in {location} is 10 mph." greeting_skill = models.Skill( frontmatter=models.Frontmatter( name="greeting-skill", description=( "A friendly greeting skill that can say hello to a specific person." ), metadata={"adk_additional_tools": ["get_timezone"]}, ), instructions=( "Step 1: Read the 'references/hello_world.txt' file to understand how" " to greet the user. Step 2: Return a greeting based on the reference." ), resources=models.Resources( references={ "hello_world.txt": "Hello! 👋👋👋 So glad to have you here! ✨✨✨", "example.md": "This is an example reference.", }, ), ) weather_skill = load_skill_from_dir( pathlib.Path(__file__).parent / "skills" / "weather-skill" ) # WARNING: UnsafeLocalCodeExecutor has security concerns and should NOT # be used in production environments. my_skill_toolset = SkillToolset( skills=[greeting_skill, weather_skill], additional_tools=[GetTimezoneTool(), get_wind_speed], code_executor=UnsafeLocalCodeExecutor(), ) root_agent = Agent( name="skill_user_agent", description="An agent that can use specialized skills.", tools=[ my_skill_toolset, ], )