2 Commits

Author SHA1 Message Date
DABH 8f85107cca fix: route workflow IDs and retry jitter through platform seams
Merge https://github.com/google/adk-python/pull/6468

PiperOrigin-RevId: 966214760
2026-08-17 15:29:13 -07:00
João Westerberg 4e4463248b feat(workflow): Allow ToolNode to accept JSON string or Content inputs
Merge https://github.com/google/adk-python/pull/6065

**Please ensure you have read the [contribution guide](https://github.com/google/adk-python/blob/main/CONTRIBUTING.md) before creating a pull request.**

### Link to Issue or Description of Change

**1. Link to an existing issue (if applicable):**

- Closes: N/A
- Related: N/A

**2. Or, if no issue exists, describe the change:**

**Problem:**
Previously, `ToolNode` in ADK workflows required input to be strictly a Python `dict` or `None`. This limited workflow flexibility, preventing users from chaining a `ToolNode` directly downstream of nodes (like LLM Agents or custom function nodes) that output inputs as serialized JSON strings or `types.Content` objects without manual parsing boilerplate.

**Solution:**
Enhanced `ToolNode._run_impl` in [_tool_node.py](file:///usr/local/google/home/westerberg/Documents/github/adk-python-fork/src/google/adk/workflow/_tool_node.py) to dynamically coerce input formats before tool execution:
- Extract text from `types.Content` when received.
- Strip and deserialize JSON strings via `json.loads` if received.
- Coerce `None` to `{}`.
- Keep strict validation raising `TypeError` for non-dictionary representations (e.g. lists, invalid JSON).

---

### Testing Plan

**Unit Tests:**

- [x] I have added or updated unit tests for my change.
- [x] All unit tests pass locally.

**Pytest Summary:**
```
tests/unittests/workflow/test_tool_node.py .......                       [100%]
======================== 7 passed, 4 warnings in 2.80s =========================
```

**Manual End-to-End (E2E) Tests:**
Verified all workflow tests pass locally with no regressions:
```
uv run pytest tests/unittests/workflow/
...
==== 600 passed, 10 skipped, 26 xfailed, 9 xpassed, 237 warnings in 15.17s =====
```

---

### Checklist

- [x] I have read the [CONTRIBUTING.md](https://github.com/google/adk-python/blob/main/CONTRIBUTING.md) document.
- [x] I have performed a self-review of my own code.
- [x] I have commented my code, particularly in hard-to-understand areas.
- [x] I have added tests that prove my fix is effective or that my feature works.
- [x] New and existing unit tests pass locally with my changes.
- [x] I have manually tested my changes end-to-end.
- [x] Any dependent changes have been merged and published in downstream modules.

Co-authored-by: George Weale <gweale@google.com>
COPYBARA_INTEGRATE_REVIEW=https://github.com/google/adk-python/pull/6065 from baptmont:tool_node_args 36edc1f8982d8b71544fc53b155d877a8a61939c
PiperOrigin-RevId: 940575182
2026-06-30 11:48:40 -07:00