RestApiTool raises uncaught KeyError when a required path param is omitted
維護者通常 1 天內回覆
還沒有人認領這個 Issue。
評估
研究方向
從 google/adk/tools/openapi_tool/openapi_spec_parser/rest_api_tool.py 開始,重點關注 _prepare_request_params 和 RestApiTool.call。使用離線單元測試設定重現缺少 user_id 的情況,並追蹤路徑格式化失敗的過程。完成的標準是:省略必要的路徑參數時,會產生結構化且可重試的工具錯誤,而不是未擷取的 KeyError 或中止的 agent 呼叫。
由索引模型根據 Issue 內容生成。
描述
Description
FunctionTool returns {"error": ...} when mandatory args are missing so the model can retry.
RestApiTool maps filled args into path_params, then does self.endpoint.path.format(**path_params) in _prepare_request_params. An omitted required path parameter leaves a template key unset → KeyError (original OpenAPI name, e.g. 'userId').
RestApiTool.call only catches TimeoutException / HTTPStatusError, so the agent invocation aborts instead of returning a retryable tool error.
Location: google/adk/tools/openapi_tool/openapi_spec_parser/rest_api_tool.py
Environment
google-adk==2.9.2- Offline unit repro (no live HTTP)
Repro
# RestApiTool for path /users/{userId} with required path param userId / py_name user_id
# Call with args {} (or missing user_id)
# → KeyError: 'userId'
Observed (google-adk==2.9.2)
- path
/users/{userId}, args{}→KeyError: 'userId' py_namesfor the param includeuser_id(declaration expects snake_case), but missing value still crashes viaformat
Expected
Missing required path params should return a structured tool error (mirror FunctionTool._get_mandatory_args) so the model can retry, not abort the agent run.
Suggested fix
Before format, verify every {placeholder} in the path is present; on miss return {"error": "missing path parameter …"}. Optionally catch KeyError/ValueError from _prepare_request_params in call.
Notes
Nearby RestApiTool crashes #7164 (header type) and #7206 (non-UTF-8 body) are different sites. Happy to open a PR.
- 主要語言
- Python
- 星號
- 21.6k
- 分支
- 4k
- 平均合併
- 12 小時 6 分鐘
- 30 天內合併 PR
- 4
環境準備
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
google/adk-python 的其他 Issue
-
難度 2/5 1-3 小時 新手友好度 88/100
google/adk-python#7298 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 88/100
google/adk-python#7292 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 82/100
google/adk-python#7289 · 1 則留言 ·
維護者通常 1 天內回覆
-
CredentialsManager should also extract scopes when populating auth schemes可能已有人在做 @sanketpatil06 於 2 天前認領。 未關閉core needs review
難度 2/5 1-3 小時 新手友好度 78/100
google/adk-python#7266 · 2 則留言 · 已指派 1 人 ·
維護者通常 1 天內回覆
-
OAuth2 Discovery method fails because FastMCP with GoogleProvider (OAuth) returns issuerUrl with trailing slash可能已有人在做 @sanketpatil06 於 3 天前認領。 未關閉mcp
難度 2/5 1-3 小時 新手友好度 78/100
google/adk-python#7265 · 3 則留言 · 已指派 1 人 ·
維護者通常 1 天內回覆
查看 google/adk-python 的全部 Issue
相似的 Issue
-
docs pydanty:is-working
難度 2/5 1-3 小時 新手友好度 75/100
pydantic/pydantic-ai#8863 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 68/100
run-llama/llama_index#23278 ·
維護者通常 2 天內回覆
-
documentation from-review-extraction github-actions priority: low severity:nit
難度 1/5 1 小時以內 新手友好度 92/100
LearningCircuit/local-deep-research#6946 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 82/100
oracle/langchain-oracle#323 ·
維護者通常 1 天內回覆
-
難度 1/5 1 小時以內 新手友好度 88/100
tenstorrent/tt-metal#58057 · 1 則留言 ·
維護者通常 1 天內回覆