Featured image of post コードディスパッチャー【Exception Translation】「自分の記録の付け方を疑っていました」〜200が返っても、契約を満たさなければ失敗として扱い直す〜

コードディスパッチャー【Exception Translation】「自分の記録の付け方を疑っていました」〜200が返っても、契約を満たさなければ失敗として扱い直す〜

LLM APIは200 OKのまま契約違反(空・打ち切り・拒否)を返すことがある。例外が上がらず成功として流れる静かな失敗を、独自例外への変換とraise...from eの例外チェーンで検出し直す設計をPython標準ライブラリだけで確かめます。

Featured image of post コードディスパッチャー【Output Contract】「これは障害ですか」に答えられなかった〜揺れてよい範囲を先に決めて、異常だと言えるようにする〜

コードディスパッチャー【Output Contract】「これは障害ですか」に答えられなかった〜揺れてよい範囲を先に決めて、異常だと言えるようにする〜

同じ問い合わせに毎回違う文章が返るLLM応答。揺れを止める代わりに、揺れてよい範囲と許さない範囲を出力の契約として先に決め、判定が揺れに影響されないことをPythonの標準ライブラリだけで確かめます。

Featured image of post コードガーデナー【Factory Method】新しい品種を迎えるたび、同じ分岐にまた手を入れる〜生まれ方は、品種自身に持たせる〜

コードガーデナー【Factory Method】新しい品種を迎えるたび、同じ分岐にまた手を入れる〜生まれ方は、品種自身に持たせる〜

種苗店で働く私が、新品種バジルの入荷登録でピーマンのラベルを壊してしまう。生成ロジックを一つのmatch関数に集約していたせいだと知り、庭師が見せてくれたRustのFactory Methodで、生まれ方そのものを品種ごとに持たせる手入れ。