[...]
File "/home/ubuntu/venv/lib/python3.12/site-packages/google/adk/tools/_gemini_schema_util.py", line 94, in _resolve_refs
return _resolve_refs(resolved)
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/venv/lib/python3.12/site-packages/google/adk/tools/_gemini_schema_util.py", line 100, in _resolve_refs
return {key: _resolve_refs(value) for key, value in sub_schema.items()}
^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/venv/lib/python3.12/site-packages/google/adk/tools/_gemini_schema_util.py", line 100, in _resolve_refs
return {key: _resolve_refs(value) for key, value in sub_schema.items()}
^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/venv/lib/python3.12/site-packages/google/adk/tools/_gemini_schema_util.py", line 94, in _resolve_refs
return _resolve_refs(resolved)
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/venv/lib/python3.12/site-packages/google/adk/tools/_gemini_schema_util.py", line 100, in _resolve_refs
return {key: _resolve_refs(value) for key, value in sub_schema.items()}
^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/venv/lib/python3.12/site-packages/google/adk/tools/_gemini_schema_util.py", line 100, in _resolve_refs
return {key: _resolve_refs(value) for key, value in sub_schema.items()}
^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/venv/lib/python3.12/site-packages/google/adk/tools/_gemini_schema_util.py", line 94, in _resolve_refs
return _resolve_refs(resolved)
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/venv/lib/python3.12/site-packages/google/adk/tools/_gemini_schema_util.py", line 100, in _resolve_refs
return {key: _resolve_refs(value) for key, value in sub_schema.items()}
^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/venv/lib/python3.12/site-packages/google/adk/tools/_gemini_schema_util.py", line 100, in _resolve_refs
return {key: _resolve_refs(value) for key, value in sub_schema.items()}
^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/venv/lib/python3.12/site-packages/google/adk/tools/_gemini_schema_util.py", line 100, in _resolve_refs
return {key: _resolve_refs(value) for key, value in sub_schema.items()}
^^^^^^^^^^^^^^^^^^^^
[Previous line repeated 1 more time]
File "/home/ubuntu/venv/lib/python3.12/site-packages/google/adk/tools/_gemini_schema_util.py", line 94, in _resolve_refs
return _resolve_refs(resolved)
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/venv/lib/python3.12/site-packages/google/adk/tools/_gemini_schema_util.py", line 100, in _resolve_refs
return {key: _resolve_refs(value) for key, value in sub_schema.items()}
^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/venv/lib/python3.12/site-packages/google/adk/tools/_gemini_schema_util.py", line 100, in _resolve_refs
return {key: _resolve_refs(value) for key, value in sub_schema.items()}
^^^^^^^^^^^^^^^^^^^^
RecursionError: maximum recursion depth exceeded
Describe the bug
The
_to_gemini_schema()function ingoogle.adk.tools._gemini_schema_utiltriggers aRecursionErrorwhen processing JSON Schemas with circular$refreferences in$defs. The_dereference_schema()helper function recursively resolves these references without detecting circular dependencies, causing infinite recursion.To Reproduce
google-adkandgoogle-genaiRecursionError: maximum recursion depth exceededExpected behavior
The function should either:
Stack trace:
Desktop (please complete the following information):
google-adk==1.20.0google-genai==1.54.0Model Information:
Additional Context
This issue was discovered while building an MCP server tool that uses schemas with legitimate circular references for recursive data structures (for example, attendees with alternate attendees)
_dereference_schema(), which currently does not perform cycle detection when recursively resolving$refpointers in$defsgoogle-genai, but that change could not be merged because the affected file (types.py) is dynamically generated