RestApiTool raises uncaught KeyError when a required path param is omitted
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 78/100
Línea de trabajo
Comienza en google/adk/tools/openapi_tool/openapi_spec_parser/rest_api_tool.py, centrándote en _prepare_request_params y RestApiTool.call. Reproduce el caso de user_id ausente con la configuración de pruebas unitarias offline y sigue el fallo de formato de la ruta. Se considera terminado cuando los parámetros de ruta requeridos omitidos producen un error estructurado y reintentable de la herramienta, en lugar de un KeyError no capturado o de una invocación del agente abortada.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- Python
- Estrellas
- 21.6k
- Forks
- 4k
- Merge medio
- 8 h 5 min
- PR fusionados (30 d)
- 6
Preparar el entorno
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de google/adk-python
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
google/adk-python#7298 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
google/adk-python#7292 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
google/adk-python#7289 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
core needs review
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
google/adk-python#7266 · 2 comentarios · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
mcp
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
google/adk-python#7265 · 2 comentarios · 1 asignado ·
Los mantenedores suelen responder en 1 día
Todos los issues de google/adk-python
Issues similares
-
needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
openvinotoolkit/openvino_notebooks#3665 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
Los mantenedores suelen responder en 1 día
-
docs
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
Los mantenedores suelen responder en 1 día
-
benchmark-gap
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día