メインコンテンツへスキップ
これはインタラクティブなノートブックです。ローカルで実行するか、以下のリンクを利用できます:

カスタムコストモデルのセットアップ

Weave は、使用されたトークン数と利用されたモデルに基づいてコストを計算します。 Weave はこの使用量とモデル情報を出力から取得し、それらを呼び出しに関連付けます。 独自にトークン使用量を計算し、その結果を Weave 内に保存する、シンプルなカスタムモデルをセットアップしてみましょう。

環境をセットアップする

必要なパッケージをすべてインストールして import します。 WANDB_API_KEY を環境変数に設定して、wandb.login() で簡単にログインできるようにします(これは Colab にシークレットとして渡す必要があります)。 W&B でこのログを記録したいプロジェクトを、name_of_wandb_project に設定します。 NOTE: チームに対してトレースを記録するには、name_of_wandb_project{team_name}/{project_name} の形式にすることもできます。 その後、weave.init() を呼び出して Weave クライアントを取得します。
%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)

Weave でモデルを設定する

from weave import Model

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

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

    # これは定義するカスタム op です
    # 文字列を受け取り、使用量カウント、モデル名、出力を含む辞書を返します
    @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 呼び出しの出力と一致します
        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"]

カスタムコストを追加する

ここではカスタムコストを追加します。カスタムコストが設定され、呼び出しに usage がある状態になったら、include_cost を指定して呼び出しを取得できます。このとき、呼び出しのコストは summary.weave.costs に格納されます。
model = YourModel(attribute1="Hello", attribute2=1)
model.predict("world")

# カスタムコストをプロジェクトに追加する
weave_client.add_cost(
    llm_id="your_model_name", prompt_token_cost=0.1, completion_token_cost=0.2
)

# callsをクエリし、include_costs=True を指定することで
# コストがcallsに付与された状態で返される
calls = weave_client.get_calls(filter={"trace_roots_only": True}, include_costs=True)

list(calls)