メインコンテンツへスキップ
W&B Weave は、深くネストされたパターンを含む sync / async の両方のジェネレーター関数のトレースをサポートします。
ジェネレーターは値を遅延的に yield するため、Weave が出力をログするのは、ジェネレーターが完全に消費された場合のみです (たとえば、list に変換したとき) 。Weave がトレース内で出力を確実に取得できるよう、 ジェネレーターは最後まで消費してください (たとえば、list() を使用します) 。
次のスクリーンショットは、前述のコードの選択されたトレースを表示した Traces ページです。中央のパネルには、選択したトレースのトレース ツリーが表示されます。トレース ツリーには、deeply_nested_generatornested_generatorinner の Ops が階層構造で表示されています。 Weave Traces ページ。深くネストされた Ops を示す選択されたトレース ツリーを表示

ジェネレーターの消費

Weave は、ジェネレーターを最後まで消費した場合にのみ、その出力をキャプチャします。ジェネレーターを消費するには、反復処理を行います (たとえば、list()for ループ、または終了するまで next() を使用します) 。同様に、async ジェネレーターでも、async for または同等の方法で最後まで消費した場合に出力がキャプチャされます。 関数や method を @weave.op でデコレートする方法について詳しくは、call の作成 を参照してください。

yield された値を 1 つのトレースに集約する

weave.opaccumulator パラメーターを使用すると、ジェネレーター function から yield される値をどのように結合するかをカスタマイズできます。たとえば、ストリーミングされたテキスト token を 1 つの文字列に連結できます。accumulator は 2 つの引数を取る関数で、Weave は yield された値ごとに 1 回これを呼び出し、結果を段階的に構築します。
accumulator パラメーターは TypeScript では使用できません。
次の例は、各 yield 値を list に追加する custom accumulator を示しています。これにより、ジェネレーター が最後まで消費されると、Weave はその list を Call の output として記録します。