Skip to content

タイトル: OpenAPI ツール: 非数値のレスポンスキーで generate_return_doc がクラッシュする #7

Description

@sanketpatil06

バグの説明
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') でフィルタリングを行っています。ここでも同じ条件(ガード)を適用することで、両方の処理パスの一貫性を保つことができます。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions