diff --git a/docs/en/getting-started/local_quickstart.md b/docs/en/getting-started/local_quickstart.md index 9049082a01..414156f672 100644 --- a/docs/en/getting-started/local_quickstart.md +++ b/docs/en/getting-started/local_quickstart.md @@ -115,7 +115,7 @@ pip install google-genai 1. Update `my_agent/agent.py` with the following content to connect to Toolbox: ```py - {{< include "quickstart/python/adk/quickstart.py" >}} + {{< regionInclude "quickstart/python/adk/quickstart.py" "quickstart" >}} ```
diff --git a/docs/en/getting-started/quickstart/python/adk/quickstart.py b/docs/en/getting-started/quickstart/python/adk/quickstart.py index 477ced578d..42a72fa38e 100644 --- a/docs/en/getting-started/quickstart/python/adk/quickstart.py +++ b/docs/en/getting-started/quickstart/python/adk/quickstart.py @@ -1,6 +1,21 @@ +# [START quickstart] +import asyncio + from google.adk import Agent from google.adk.apps import App +from google.adk.runners import InMemoryRunner from google.adk.tools.toolbox_toolset import ToolboxToolset +from google.genai.types import Content, Part + +prompt = """ +You're a helpful hotel assistant. You handle hotel searching, booking and +cancellations. When the user searches for a hotel, mention it's name, id, +location and price tier. Always mention hotel ids while performing any +searches. This is very important for any operations. For any bookings or +cancellations, please provide the appropriate confirmation. Be sure to +update checkin or checkout dates if mentioned by the user. +Don't ask for confirmations from the user. +""" # TODO(developer): update the TOOLBOX_URL to your toolbox endpoint toolset = ToolboxToolset( @@ -8,10 +23,35 @@ toolset = ToolboxToolset( ) root_agent = Agent( - name='root_agent', + name='hotel_assistant', model='gemini-2.5-flash', - instruction="You are a helpful AI assistant designed to provide accurate and useful information.", + instruction=prompt, tools=[toolset], ) app = App(root_agent=root_agent, name="my_agent") +# [END quickstart] + +queries = [ + "Find hotels in Basel with Basel in its name.", + "Can you book the Hilton Basel for me?", + "Oh wait, this is too expensive. Please cancel it and book the Hyatt Regency instead.", + "My check in dates would be from April 10, 2024 to April 19, 2024.", +] + +async def main(): + runner = InMemoryRunner(app=app) + session = await runner.session_service.create_session( + app_name=app.name, user_id="test_user" + ) + + for query in queries: + print(f"\nUser: {query}") + user_message = Content(parts=[Part.from_text(text=query)]) + + async for event in runner.run_async(user_id="test_user", session_id=session.id, new_message=user_message): + if event.is_final_response() and event.content and event.content.parts: + print(f"Agent: {event.content.parts[0].text}") + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/docs/en/getting-started/quickstart/python/quickstart_test.py b/docs/en/getting-started/quickstart/python/quickstart_test.py index eb46bee1f8..b6c6e3a8a8 100755 --- a/docs/en/getting-started/quickstart/python/quickstart_test.py +++ b/docs/en/getting-started/quickstart/python/quickstart_test.py @@ -41,31 +41,29 @@ def golden_keywords(): class TestExecution: """Test framework execution and output validation.""" + _cached_output = None + @pytest.fixture(scope="function") def script_output(self, capsys): """Run the quickstart function and return its output.""" - - # TODO: Add better validation for ADK once we have a way to capture its - # output. - if ORCH_NAME == "adk": - return quickstart.app.root_agent.name - else: + if TestExecution._cached_output is None: asyncio.run(quickstart.main()) - - return capsys.readouterr() + out, err = capsys.readouterr() + TestExecution._cached_output = (out, err) + + class Output: + def __init__(self, out, err): + self.out = out + self.err = err + + return Output(*TestExecution._cached_output) def test_script_runs_without_errors(self, script_output): """Test that the script runs and produces no stderr.""" - if ORCH_NAME == "adk": - return assert script_output.err == "", f"Script produced stderr: {script_output.err}" def test_keywords_in_output(self, script_output, golden_keywords): """Test that expected keywords are present in the script's output.""" - - if ORCH_NAME == "adk": - assert script_output == "root_agent" - return output = script_output.out missing_keywords = [kw for kw in golden_keywords if kw not in output] assert not missing_keywords, f"Missing keywords in output: {missing_keywords}" diff --git a/docs/en/how-to/deploy_adk_agent.md b/docs/en/how-to/deploy_adk_agent.md index 973d84dfe6..cc247d4831 100644 --- a/docs/en/how-to/deploy_adk_agent.md +++ b/docs/en/how-to/deploy_adk_agent.md @@ -83,15 +83,12 @@ Toolbox instead of the local address. 2. Open your agent file (`my_agent/agent.py`). -3. Update the `ToolboxSyncClient` initialization to use your Cloud Run URL. +3. Update the `ToolboxToolset` initialization to point to your Cloud Run service URL. Replace the existing initialization code with the following: - {{% alert color="info" %}} -Since Cloud Run services are secured by default, you also need to provide an -authentication token. + {{% alert color="info" title="Note" %}} +Since Cloud Run services are secured by default, you also need to provide a workload identity. {{% /alert %}} - Replace your existing client initialization code with the following: - ```python from google.adk import Agent from google.adk.apps import App @@ -132,14 +129,14 @@ app = App(root_agent=root_agent, name="my_agent") Run the deployment command: ```bash -make backend +make deploy ``` This command will build your agent's container image and deploy it to Vertex AI. ## Step 6: Test your Deployment -Once the deployment command (`make backend`) completes, it will output the URL +Once the deployment command (`make deploy`) completes, it will output the URL for the Agent Engine Playground. You can click on this URL to open the Playground in your browser and start chatting with your agent to test the tools.