Weave opは、すべての呼び出しを自動的にログに記録するバージョン管理された関数です。
opを作成するには、Pythonの関数をweave.op()
showLineNumbers
import weave

@weave.op()
def track_me(v):
    return v + 5

weave.init('intro-example')
track_me(15)
opを呼び出すと、コードが前回の呼び出しから変更されている場合は新しいopバージョンが作成され、関数の入力と出力がログに記録されます。:::note でデコレートされた関数は@weave.op()それらを呼び出す前にweave.init('your-project-name')を呼び出さない場合、通常通り(コードのバージョン管理と追跡なしで)動作します。 :::OpsはservedまたはdeployedWeave toolbeltを使用して行うことができます。

表示名をカスタマイズする

opの表示名はnameパラメータを@weave.op decorator:
@weave.op(name="custom_name")
def func():
    ...

ログに記録される入力と出力をカスタマイズする

元の関数を変更せずにweaveにログ記録されるデータを変更したい場合(例:機密データを隠すため)、postprocess_inputspostprocess_outputをopデコレータに渡すことができます。postprocess_inputsは引数名をキーとし、引数値を値とする辞書を受け取り、変換された入力を持つ辞書を返します。postprocess_outputは通常関数によって返される任意の値を受け取り、変換された出力を返します。
from dataclasses import dataclass
from typing import Any
import weave

@dataclass
class CustomObject:
    x: int
    secret_password: str

def postprocess_inputs(inputs: dict[str, Any]) -> dict[str, Any]:
    return {k:v for k,v in inputs.items() if k != "hide_me"}

def postprocess_output(output: CustomObject) -> CustomObject:
    return CustomObject(x=output.x, secret_password="REDACTED")

@weave.op(
    postprocess_inputs=postprocess_inputs,
    postprocess_output=postprocess_output,
)
def func(a: int, hide_me: str) -> CustomObject:
    return CustomObject(x=a, secret_password=hide_me)

weave.init('hide-data-example') # 🐝
func(a=1, hide_me="password123")

サンプリングレートを制御する

opの呼び出しがトレースされる頻度はtracing_sample_rateパラメータを@weave.opデコレータで設定することで制御できます。これは、呼び出しのサブセットのみをトレースする必要がある高頻度のopsに役立ちます。サンプリングレートはルート呼び出しにのみ適用されることに注意してください。opにサンプルレートがあっても、最初に別のopによって呼び出された場合、そのサンプリングレートは無視されます。
@weave.op(tracing_sample_rate=0.1)  # Only trace ~10% of calls
def high_frequency_op(x: int) -> int:
    return x + 1

@weave.op(tracing_sample_rate=1.0)  # Always trace (default)
def always_traced_op(x: int) -> int:
    return x + 1
opの呼び出しがサンプリングされない場合:
  • 関数は通常通り実行されます
  • トレースデータはWeaveに送信されません
  • その呼び出しの子opsもトレースされません
サンプリングレートは0.0から1.0までの間(両端を含む)でなければなりません。

呼び出しリンク出力を制御する

ロギング中の呼び出しリンクの印刷を抑制したい場合は、WEAVE_PRINT_CALL_LINK環境変数をfalseに設定できます。これは出力の冗長性を減らし、ログの混雑を減らすのに役立ちます。
export WEAVE_PRINT_CALL_LINK=false

opを削除する

opのバージョンを削除するには、op refで.delete()を呼び出します。
weave.init('intro-example')
my_op_ref = weave.ref('track_me:v1')
my_op_ref.delete()
削除されたopにアクセスしようとするとエラーが発生します。