> ## Documentation Index
> Fetch the complete documentation index at: https://wb-21fd5541-feature-automate-reference-docs-generation.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Ops

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

<Tabs>
  <Tab title="Python">
    opを作成するには、Pythonの関数を`weave.op()`

    ```python 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](/ja/guides/tools/serve)または[deployed](/ja/guides/tools/deploy)Weave toolbeltを使用して行うことができます。
  </Tab>

  <Tab title="TypeScript">
    opを作成するには、TypeScript関数を`weave.op`

    ```typescript showLineNumbers
    import * as weave from 'weave'

    function trackMe(v: number) {
        return v + 5
    }

    const trackMeOp = weave.op(trackMe)
    trackMeOp(15)

    // You can also do this inline, which may be more convenient
    const trackMeInline = weave.op((v: number) => v + 5)
    trackMeInline(15)
    ```
  </Tab>
</Tabs>

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

<Tabs>
  <Tab title="Python">
    opの表示名は`name`パラメータを`@weave.op` decorator:

    ```python
    @weave.op(name="custom_name")
    def func():
        ...
    ```
  </Tab>

  <Tab title="TypeScript">
    ```plaintext
    This feature is not available in TypeScript yet.  Stay tuned!
    ```
  </Tab>
</Tabs>

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

<Tabs>
  <Tab title="Python">
    元の関数を変更せずにweaveにログ記録されるデータを変更したい場合（例：機密データを隠すため）、`postprocess_inputs`と`postprocess_output`をopデコレータに渡すことができます。

    `postprocess_inputs`は引数名をキーとし、引数値を値とする辞書を受け取り、変換された入力を持つ辞書を返します。

    `postprocess_output`は通常関数によって返される任意の値を受け取り、変換された出力を返します。

    ```py
    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")
    ```
  </Tab>

  <Tab title="TypeScript">
    ```plaintext
    This feature is not available in TypeScript yet.  Stay tuned!
    ```
  </Tab>
</Tabs>

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

<Tabs>
  <Tab title="Python">
    opの呼び出しがトレースされる頻度は`tracing_sample_rate`パラメータを`@weave.op`デコレータで設定することで制御できます。これは、呼び出しのサブセットのみをトレースする必要がある高頻度のopsに役立ちます。

    サンプリングレートはルート呼び出しにのみ適用されることに注意してください。opにサンプルレートがあっても、最初に別のopによって呼び出された場合、そのサンプリングレートは無視されます。

    ```python
    @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までの間（両端を含む）でなければなりません。
  </Tab>

  <Tab title="TypeScript">
    ```plaintext
    This feature is not available in TypeScript yet. Stay tuned!
    ```
  </Tab>
</Tabs>

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

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

```bash
export WEAVE_PRINT_CALL_LINK=false
```

## opを削除する

<Tabs>
  <Tab title="Python">
    opのバージョンを削除するには、op refで`.delete()`を呼び出します。

    ```python
    weave.init('intro-example')
    my_op_ref = weave.ref('track_me:v1')
    my_op_ref.delete()
    ```

    削除されたopにアクセスしようとするとエラーが発生します。
  </Tab>

  <Tab title="TypeScript">
    ```plaintext
    This feature is not available in TypeScript yet.  Stay tuned!
    ```
  </Tab>
</Tabs>
