From 4111f85b61b0aaa9e8ddcf9cd77d68607a33e2ba Mon Sep 17 00:00:00 2001 From: Krishna vamsi Dhulipalla Date: Wed, 10 Dec 2025 17:24:27 -0800 Subject: [PATCH] docs(adk): fix run_async example and correct ticketId payload key MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merge https://github.com/google/adk-python/pull/3875 # Problem The example in `contributing/samples/human_in_loop/README.md` shows: ```python await runner.run_async(...) ``` However, `run_async` returns an **async generator**, so awaiting it raises: ``` TypeError: object async_generator can't be used in 'await' expression ``` Additionally, the example payload uses `"ticket-id"` while ADK tools and other examples use `"ticketId"`, creating a mismatch that breaks copy/paste usage. # Solution - Updated the snippet to consume the async generator correctly: ```python async for event in runner.run_async(...): ... ``` - Aligned the payload key from `"ticket-id"` → `"ticketId"` for consistency with ADK schema and other examples. These changes make the example runnable and consistent with the API’s actual behavior. # Testing Plan This PR is a **small documentation correction**, so no unit tests are required per contribution guidelines. - Verified the corrected snippet manually to ensure it no longer raises `TypeError`. # Checklist - [x] I have read the CONTRIBUTING.md document. - [x] I have performed a self-review of my own code. - [ ] I have commented my code, particularly in hard-to-understand areas. *(N/A – docs only)* - [ ] I have added tests that prove my fix is effective or that my feature works. *(N/A – docs only)* - [ ] New and existing unit tests pass locally with my changes. *(N/A – docs only)* - [x] I have manually tested my changes end-to-end. - [ ] Any dependent changes have been merged and published in downstream modules. *(N/A)* COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/3875 from krishna-dhulipalla:docs/fix-adk-run_async-example 83fc5b430690b63b8b7bf1025ef03b0761264751 PiperOrigin-RevId: 842952362 --- contributing/samples/human_in_loop/README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/contributing/samples/human_in_loop/README.md b/contributing/samples/human_in_loop/README.md index 141851fc..06d676cb 100644 --- a/contributing/samples/human_in_loop/README.md +++ b/contributing/samples/human_in_loop/README.md @@ -18,7 +18,7 @@ This example demonstrates an agent using a long-running tool (`ask_for_approval` # Example: After external approval updated_tool_output_data = { "status": "approved", - "ticket-id": ticket_id, # from original call + "ticketId": ticket_id, # from original call # ... other relevant updated data } @@ -31,12 +31,13 @@ This example demonstrates an agent using a long-running tool (`ask_for_approval` ) # Send this back to the agent - await runner.run_async( + async for _ in runner.run_async( # ... session_id, user_id ... new_message=types.Content( parts=[updated_function_response_part], role="user" ), - ) + ): + pass # exhaust generator (or handle events) ``` 6. **Agent Acts on Update**: The agent receives this message containing the `types.FunctionResponse` and, based on its instructions, proceeds with the next steps (e.g., calling another tool like `reimburse`).