# 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. from __future__ import annotations import pathlib from google.adk.agents 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-08: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." # 1. Define a skill programmatically support_hours_skill = models.Skill( frontmatter=models.Frontmatter( name="support-hours-skill", description=( "A skill to check customer support hours for a given location." ), metadata={"adk_additional_tools": ["get_timezone"]}, ), instructions=( "Step 1: Look up the timezone for the user's location using" " 'get_timezone'. Step 2: Read 'references/support_policy.txt' to" " understand support hours policy. Step 3: Explain the support hours" " relative to the location's timezone." ), resources=models.Resources( references={ "support_policy.txt": ( "Customer support is available Monday through Friday, " "from 9:00 AM to 5:00 PM local time." ), }, ), ) # 2. Load a skill from a directory weather_skill = load_skill_from_dir( pathlib.Path(__file__).parent / "skills" / "weather-skill" ) # 3. Combine them into a SkillToolset # NOTE: UnsafeLocalCodeExecutor has security concerns and should NOT # be used in production environments. my_skill_toolset = SkillToolset( skills=[support_hours_skill, weather_skill], additional_tools=[GetTimezoneTool(), get_wind_speed], code_executor=UnsafeLocalCodeExecutor(), ) # 4. Set up the agent with the toolset root_agent = Agent( name="skills_agent", description="An agent that can use specialized skills.", tools=[ my_skill_toolset, ], )