概要
このリリースでは、Code Interpreter クライアントのファイルアップロード・ダウンロード機能における二重 base64 エンコーディング問題の修正、ランタイムのエラーハンドリング改善、バウンドメソッドの entrypoint() 登録サポートなど、複数の重要なバグ修正が含まれています。
リリース: v1.9.1
バグ修正
upload_file/download_file の二重 base64 エンコーディング問題を修正 (#464)
問題:
upload_file/upload_filesが botocore の blob shape に渡す前に冗長に base64 エンコードを行っていたため、botocore が再度エンコードしていましたdownload_file/download_filesも同様に、botocore が既にデコードしたレスポンスを冗長にデコードしていました- これにより、バイナリファイルのアップロード時にデータが破損し、ダウンロード時にクラッシュやガベージデータが返される問題が発生していました
修正内容:
upload_file/upload_filesからbase64.b64encode()を削除し、生のバイトデータを直接 botocore に渡すようになりましたdownload_file/download_filesからbase64.b64decode()を削除し、botocore がデコード済みのバイトデータをそのまま使用するようになりました
使用例:
from bedrock_agentcore.tools import CodeInterpreterClient
client = CodeInterpreterClient(session_id="my-session")
# バイナリファイルのアップロード(v1.9.1 で正常に動作)
with open("image.png", "rb") as f:
binary_data = f.read()
client.upload_file("image.png", binary_data)
# バイナリファイルのダウンロード
downloaded_data = client.download_file("image.png")
# ラウンドトリップが正常に動作
assert downloaded_data == binary_data
ポイント:
- v1.9.1 にアップグレードすることで、バイナリファイルのアップロード・ダウンロードが正常に動作するようになります
- 既存のコードの変更は不要です
リクエストパースエラーとハンドラーの JSON エラーを区別 (#472)
問題:
- ハンドラー内で
json.JSONDecodeErrorが発生した場合(例:モデル出力のパース時)、誤って「Invalid JSON in request」というエラーメッセージが返されていました - これにより、実際のエラー原因が分かりにくくなっていました
修正内容:
JSONDecodeError/UnicodeDecodeErrorのキャッチ範囲をrequest.json()のパース処理のみに限定しました- ハンドラーで発生した例外は HTTP 500 で実際のエラーメッセージを返すようになりました
影響を受けていたケース:
- ハンドラー内で JSON のパース処理を行っている場合
- モデル出力の JSON パースでエラーが発生した場合
修正後の動作:
- リクエスト JSON が無効な場合: HTTP 400「Invalid JSON in request」
- ハンドラー内で
JSONDecodeErrorが発生した場合: HTTP 500 と実際のエラーメッセージ
entrypoint() でバウンドメソッドの登録をサポート (#474)
問題:
- クラスベースの Agent パターンで、バウンドメソッドを
entrypoint()に登録しようとするとAttributeErrorが発生していました - バウンドメソッドやその他の書き込み可能な
__dict__を持たない callable を登録できませんでした
修正内容:
entrypoint()内の.run属性の割り当てをtry/except AttributeErrorでガードしました- バウンドメソッドでも問題なく登録できるようになりました
使用例:
from bedrock_agentcore.runtime import App
app = App()
class MyAgent:
def __init__(self, config):
self.config = config
def handle_request(self, request):
# Agent のロジック
return {"result": "success", "config": self.config}
# クラスベースの Agent パターン
agent = MyAgent(config={"model": "claude-3"})
# v1.9.0 以前: AttributeError が発生
# v1.9.1: 正常に登録される
app.entrypoint()(agent.handle_request)
ポイント:
- クラスベースの Agent パターンがサポートされ、より柔軟な設計が可能になりました
- 通常の関数デコレータとしての使用方法には影響ありません
まとめ
このリリースでは、Code Interpreter のファイル操作における二重 base64 エンコーディング問題、ランタイムのエラーハンドリング改善、クラスベース Agent パターンのサポートなど、複数の重要なバグ修正が行われました。特にファイルアップロード・ダウンロード機能を使用している場合は、v1.9.1 へのアップグレードを推奨します。