nikkie-ftnextの日記

イベントレポートや読書メモを発信

Ruby の faraday で Gemini API を呼び出した時、リクエストやレスポンスのボディの計装を試みる

はじめに

七尾百合子さん、お誕生日 341日目 おめでとうございます! nikkieです。

登壇準備1からセーブポイントです。
Python で計装するのと同様にできないか、GPT 5.2 や Opus 4.6 の知恵を借りながら手を動かしました。
※Ruby は経験がなくフィルターバブルに陥っている可能性もありますので、よりよいやり方に気づいた方はぜひ教えてください

目次

前回の登壇準備:Ruby で Gemini API を呼び出す

mise で Ruby を導入し、faraday で DeepMind の Gemini API(API キー発行して無料で利用できる2)を呼び出しました

この状態がこちらです。

ここから opentelemetry-instrumentation-faraday を試します

やりたいこと:Python のように計装したい

Python だと opentelemetry-instrumentation-google-genai を使って、google-genai SDK から Gemini API へのリクエストもレスポンスも計装できます。
LLM への入力は全部分かりたい束縛系の私にとって、これは非常に助かります(私の癖を満たすだけでなく、開発中のデバッグが捗りますので)

環境変数OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENTtrueに設定します

これと同じことをやってみたいなと思いました。
結論としては、HTTPX の計装でコードを書いたのと近い感じになりました

faraday で Gemini API を呼び出したときのリクエストボディやレスポンスボディを計装できた方法

faraday の Middleware を使いました。
また、conn.builder.handlersの順番を確認し、以下の順番にしています。

[OpenTelemetry::Instrumentation::Faraday::Middlewares::Old::TracerMiddleware, OtelBodyCaptureMiddleware]

f.use OtelBodyCaptureMiddlewareという設定だと逆順になり、ボディはトレースされません。
OtelBodyCaptureMiddlewareが先に call されると、instrumentation のスパンが開始されていないということらしいです(理解を深めたい宿題事項)

トレースの全体はこちら
https://gist.github.com/ftnext/d582f2e9aada6919cbf97d8e70ebe8c3

OpenTelemetry について短い詩を書いてください。

暗闇を編む、見えない糸、(省略)

この時点のコードはこちらです。

終わりに

Python で opentelemetry-instrumentation-google-genai を使ったときと同じようなリクエストボディとレスポンスボディのトレースを faraday で試みました。
今回動いたコードとしては、faraday の Middleware を使って、また順序に注意を払って計装します


  1. 入力は Google がモデルの訓練に使っています