> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
> Use this file to discover all available pages before exploring further.

# カスタムモデルのコスト

> W&B Weave でカスタムモデルのコストを定義してトラッキングし、さまざまな LLM プロバイダやモデルの支出を監視します。

<Note>
  これはインタラクティブなノートブックです。ローカルで実行するか、以下のリンクから開いてください。

  * [Google Colab で開く](https://colab.research.google.com/github/wandb/docs/blob/main/weave/cookbooks/source/custom_model_cost.ipynb)
  * [GitHub でソースを表示](https://github.com/wandb/docs/blob/main/weave/cookbooks/source/custom_model_cost.ipynb)
</Note>

<h2 id="set-up-a-custom-cost-model">
  カスタムコストモデルを設定する
</h2>

このガイドでは、自身のトークン使用量を報告するカスタムモデルを Weave で定義し、そのモデルにトークンあたりのカスタムコストを登録したうえで、コスト情報が関連付けられた Call を取得する方法を説明します。Weave の組み込みコストデータに含まれていないモデルを使用していて、トレースとあわせて支出をトラッキングしたい場合に活用してください。

Weave は、使用されたトークン数とモデルに基づいてコストを計算します。
Weave は出力からこの使用量とモデルを取得し、Call に関連付けます。

自身のトークン使用量を計算して Weave に保存する、シンプルなカスタムモデルを設定します。

<h3 id="set-up-the-environment">
  環境を設定する
</h3>

必要なパッケージをすべてインストールしてインポートします。
`wandb.login()` でログインできるよう、環境変数 `WANDB_API_KEY` を設定します (Colab ではシークレットとして渡してください)。

ログする先となる W\&B の project を `name_of_wandb_project` に設定します。

<Note>
  `name_of_wandb_project` は `{team_name}/{project_name}` の形式でも指定できます。この形式を使うと、トレースをログする先のチームを指定できます。
</Note>

次に、`weave.init()` を呼び出して Weave クライアントを取得します。

```python lines theme={"system"}
%pip install wandb weave datetime --quiet
python
import os

import wandb
from google.colab import userdata

import weave

os.environ["WANDB_API_KEY"] = userdata.get("WANDB_API_KEY")
name_of_wandb_project = "custom-cost-model"

wandb.login()
python
weave_client = weave.init(name_of_wandb_project)
```

<h3 id="set-up-a-model-with-weave">
  Weave でモデルを設定する
</h3>

次に、トークン数を独自に集計する Weave `Model` のサブクラスを定義します。出力の辞書に使用量のカウントとモデル名を含めて返すことで、Weave はこの Call を、次のセクションで定義するカスタムコストと後から関連付けられるようになります。

```python lines theme={"system"}
from weave import Model

class YourModel(Model):
    attribute1: str
    attribute2: int

    def simple_token_count(self, text: str) -> int:
        return len(text) // 3

    # ここで独自に定義するカスタム op です
    # string を受け取り、使用量のカウント、モデル名、出力を含む dict を返します
    @weave.op()
    def custom_model_generate(self, input_data: str) -> dict:
        # ここにモデルのロジックを記述します
        # カスタムの生成関数はここに実装します
        prediction = self.attribute1 + " " + input_data

        # 使用量のカウント
        prompt_tokens = self.simple_token_count(input_data)
        completion_tokens = self.simple_token_count(prediction)

        # 使用量のカウント、モデル名、出力を含む辞書を返します
        # Weave はこれを自動的にトレースに関連付けます
        # このオブジェクト {usage, model, output} は OpenAI の Call の出力と同じ形式です
        return {
            "usage": {
                "input_tokens": prompt_tokens,
                "output_tokens": completion_tokens,
                "total_tokens": prompt_tokens + completion_tokens,
            },
            "model": "your_model_name",
            "output": prediction,
        }

    # predict 関数では、カスタムの生成関数を呼び出してその出力を返します。
    @weave.op()
    def predict(self, input_data: str) -> dict:
        # データの後処理が必要な場合はここで行います
        outputs = self.custom_model_generate(input_data)
        return outputs["output"]
```

<h3 id="add-a-custom-cost">
  カスタムコストを追加する
</h3>

カスタムコストを追加します。カスタムコストを追加した後、Call に使用量が記録されると、`include_cost` を指定して Call を取得し、`summary.weave.costs` でコストを確認できます。

```python lines theme={"system"}
model = YourModel(attribute1="Hello", attribute2=1)
model.predict("world")

# 次に、project にカスタムコストを追加します
weave_client.add_cost(
    llm_id="your_model_name", prompt_token_cost=0.1, completion_token_cost=0.2
)

# その後、Call をクエリします。include_costs=True を指定すると、
# 各 Call にコストが関連付けられた状態で返されます
calls = weave_client.get_calls(filter={"trace_roots_only": True}, include_costs=True)

list(calls)
```

これで、自身のトークン使用量を記録するカスタムモデル、そのモデルの `llm_id` に対して登録されたカスタムコスト、そして Call ごとのコストデータが `summary.weave.costs` に関連付けられた Call を取得する方法が揃いました。


## Related topics

- [概要](/ja/products/wandb/weave/cookbooks.md)
