制限付きchunked本文のデコード
最大65536バイトの制限付きchunked本文を、出力4096バイト以内でデコードします。
def chunk_body(wire):
if type(wire) is not bytes or len(wire) > 65536:
raise ValueError("bounded bytes")
pos, body = 0, bytearray()
while True:
end = wire.find(b"\r\n", pos)
token = wire[pos:end] if end >= 0 else b""
if not 1 <= len(token) <= 8 or any(
c not in b"0123456789abcdefABCDEF" for c in token):
raise ValueError("plain hexadecimal size")
size, pos = int(token, 16), end + 2
if size == 0:
if wire[pos:] != b"\r\n":
raise ValueError("no trailers or extra bytes")
return bytes(body)
if len(body) + size > 4096:
raise ValueError("body limit")
if pos + size + 2 > len(wire):
raise ValueError("truncated chunk")
if wire[pos + size:pos + size + 2] != b"\r\n":
raise ValueError("chunk delimiter")
body.extend(wire[pos:pos + size])
pos += size + 2- モデル
- OpenAI互換またはAnthropicのエンドポイントを、ベースURLと必要なAPIキーで設定し、接続をテストします。ローカルのモデルサーバーは起動が必要です。リモートツールは別途データを送信する場合があります。
- プロジェクト
- 内部のCRLFとゼロチャンクを確認し、欠損・拡張・末尾フィールド・余分なバイトを拒否します。
- 適用前に確認
- 実際の動作を期待する結果と比較します。検証に失敗した場合は、次の変更を加える前に原因を調べてください。
def chunk_body(wire):
if type(wire) is not bytes or len(wire) > 65536:
raise ValueError("bounded bytes")
pos, body = 0, bytearray()
while True:
end = wire.find(b"\r\n", pos)
token = wire[pos:end] if end >= 0 else b""
if not 1 <= len(token) <= 8 or any(
c not in b"0123456789abcdefABCDEF" for c in token):
raise ValueError("plain hexadecimal size")
size, pos = int(token, 16), end + 2
if size == 0:
if wire[pos:] != b"\r\n":
raise ValueError("no trailers or extra bytes")
return bytes(body)
if len(body) + size > 4096:
raise ValueError("body limit")
if pos + size + 2 > len(wire):
raise ValueError("truncated chunk")
if wire[pos + size:pos + size + 2] != b"\r\n":
raise ValueError("chunk delimiter")
body.extend(wire[pos:pos + size])
pos += size + 2デコーダーが受け付ける形式を明示する
デコーダーには有効な入力の終わりと拒否の始まりを正確に定める必要があります。ChunkRavelは、プロジェクトコードを見ながらその境界を開発するWindows向けAIコーディングワークスペースです。対応する入力形式、サイズ制限、期待する結果を説明し、既存実装がバイトをたどり失敗を報告する方法を調べるよう依頼します。
制限付きチャンク本文の例は検討できる課題の1つです。意図的に狭い形式だけを受け付けるので、切れた入力や余分なバイトとともに、非対応の拡張とトレーラーをレビューします。要件で明示的に広げない限り、指定した制限を保つ変更案を求めてください。正しいバイト結果も受け取る部品で誤処理され得るため、復号出力を呼び出し側まで追跡します。
拒否抑制を解除したAIの選択肢には、対応するOpenAI互換またはAnthropicのエンドポイントを通じて利用可能なモデルを選び、必要な認証情報を設定します。コンテキスト、ツール、適用される制限はモデルとサーバーによって決まります。デコーダー変更の採用前に差分を調べ、有効・無効両方のテストデータをプロジェクトのテストで実行してください。別途稼働するローカルモデルサーバーを使っても、すべての接続ツールやサービスがローカルになるわけではありません。
範囲の狭いデコーダー契約をレビューする
- デコーダーはあらゆるチャンク入力を受け付けるべきですか?
アプリケーションの要件であり、そのために実装を設計・テストした場合に限ります。例は限定形式に対応しています。狭い実例を完全なプロトコル対応と捉えず、拡張、トレーラー、その他の非対応ケースを明示してください。
- 途中で切れた本文をどうテストすべきですか?
サイズトークン、本文、区切りの途中など、意味のある境界で切ったテストデータを用意します。期待する拒否動作を示してください。実際のデコーダー入口で実行し、周囲の入力処理も調査結果に含めます。
- 最終チャンクの後に残るバイトを確認するのはなぜですか?
未消費入力には定義された方針が必要です。余分なバイトを拒否するのか別の層が処理するのか調べ、その契約をテストしてください。誤って無視するとデコーダーと呼び出し側の不一致を隠す場合があります。
- SQL関連のドメインはデータベース復号機能を意味しますか?
そのような機能は主張していません。提供例はバイト復号を扱い、ChunkRavelはWindows向けAIコーディングワークスペースです。ドメインから機能を推測せず、課題に合う実際のプロジェクトファイルとランタイムを選んでください。
ChunkRavel · 更新日 2026-10-25