バグの説明
PydocHelper.generate_return_doc は、ソートされたレスポンスリストを sorted(responses.items(), key=lambda item: int(item[0])) を使用して構築します。しかし、OpenAPI 3.x では Responses Object 内で非数値のキー(default や 1XX/2XX/3XX/4XX/5XX といった範囲パターン)が許可されています。これらのキーのいずれかが存在する場合、int(item[0]) が ValueError を送出するため、それ以外は有効な OpenAPI 仕様からツールを生成しようとしてもクラッシュしてしまいます。
再現手順
from fastapi.openapi.models import Response, Schema, MediaType
from google.adk.tools.openapi_tool.common.common import PydocHelper
responses = {
"200": Response(description="OK", content={"application/json": MediaType(schema=Schema(type="string"))}),
"default": Response(description="Error response"),
}
PydocHelper.generate_return_doc(responses)
# ValueError: invalid literal for int() with base 10: 'default'
期待される挙動
戻り値の型ヒント(return-type hinting)において、非数値のレスポンスキーは無視されるべきです(既存のコードでも、すぐ次の行で content を持つ 2xx 系のレスポンスのみを保持する仕様になっています)。したがって、関数はクラッシュするのではなく、200 レスポンス用のドキュメントを正常に返す必要があります。
環境 (Desktop)
google-adk 2.1.0 以降(2026年6月10日時点の main ブランチでも引き続き発生)
補足情報
operation_parser では、キーを処理する前にすでに startswith('2') でフィルタリングを行っています。ここでも同じ条件(ガード)を適用することで、両方の処理パスの一貫性を保つことができます。
バグの説明
PydocHelper.generate_return_doc は、ソートされたレスポンスリストを sorted(responses.items(), key=lambda item: int(item[0])) を使用して構築します。しかし、OpenAPI 3.x では Responses Object 内で非数値のキー(default や 1XX/2XX/3XX/4XX/5XX といった範囲パターン)が許可されています。これらのキーのいずれかが存在する場合、int(item[0]) が ValueError を送出するため、それ以外は有効な OpenAPI 仕様からツールを生成しようとしてもクラッシュしてしまいます。
再現手順
期待される挙動
戻り値の型ヒント(return-type hinting)において、非数値のレスポンスキーは無視されるべきです(既存のコードでも、すぐ次の行で content を持つ 2xx 系のレスポンスのみを保持する仕様になっています)。したがって、関数はクラッシュするのではなく、200 レスポンス用のドキュメントを正常に返す必要があります。
環境 (Desktop)
google-adk 2.1.0 以降(2026年6月10日時点の main ブランチでも引き続き発生)
補足情報
operation_parser では、キーを処理する前にすでに startswith('2') でフィルタリングを行っています。ここでも同じ条件(ガード)を適用することで、両方の処理パスの一貫性を保つことができます。