Weaveは動画、画像、音声のログ記録と表示をサポートしています。

動画

Weaveは自動的にmoviepyを使用して動画をログに記録します。これにより、トレース対象の関数に動画の入力と出力を渡すことができ、Weaveは自動的に動画データのアップロードと保存を処理します。
動画サポートは現在Pythonでのみ利用可能です。
使用方法については、Video Supportをご覧ください。

画像

ログ記録タイプ: PIL.Image.Image.
Base64エンコードされた画像文字列(例:data:image/jpeg;base64,...)は技術的にはサポートされていますが、推奨されていません。パフォーマンスの問題を引き起こす可能性があり、絶対に必要な場合(特定のAPIとの統合など)にのみ使用すべきです。
以下の例は、OpenAI DALL-E APIを使用して生成された画像をログに記録する方法を示しています:
import weave
from openai import OpenAI
import requests
from PIL import Image

weave.init('image-example')
client = OpenAI()

@weave.op
def generate_image(prompt: str) -> Image:
    response = client.images.generate(
        model="dall-e-3",
        prompt=prompt,
        size="1024x1024",
        quality="standard",
        n=1,
    )
    image_url = response.data[0].url
    image_response = requests.get(image_url, stream=True)
    image = Image.open(image_response.raw)

    # return a PIL.Image.Image object to be logged as an image
    return image

generate_image("a cat with a pumpkin hat")
この画像はWeaveにログ記録され、UIに自動的に表示されます。 Screenshot of pumpkin cat trace view

大きな画像はログ記録前にリサイズする

UIのレンダリングコストとストレージへの影響を減らすために、ログ記録前に画像をリサイズすると便利です。postprocess_output@weave.opで使用して画像をリサイズできます。
from dataclasses import dataclass
from typing import Any
from PIL import Image
import weave

weave.init('image-resize-example')

# Custom output type
@dataclass
class ImageResult:
    label: str
    image: Image.Image

# Resize helper
def resize_image(image: Image.Image, max_size=(512, 512)) -> Image.Image:
    image = image.copy()
    image.thumbnail(max_size, Image.ANTIALIAS)
    return image

# Postprocess output to resize image before logging
def postprocess_output(output: ImageResult) -> ImageResult:
    resized = resize_image(output.image)
    return ImageResult(label=output.label, image=resized)

@weave.op(postprocess_output=postprocess_output)
def generate_large_image() -> ImageResult:
    # Create an example image to process (e.g., 2000x2000 red square)
    img = Image.new("RGB", (2000, 2000), color="red")
    return ImageResult(label="big red square", image=img)

generate_large_image()

音声

ログ記録タイプ: wave.Wave_read. 以下の例は、OpenAIの音声生成APIを使用して音声ファイルをログに記録する方法を示しています。
import weave
from openai import OpenAI
import wave

weave.init("audio-example")
client = OpenAI()

@weave.op
def make_audio_file_streaming(text: str) -> wave.Wave_read:
    with client.audio.speech.with_streaming_response.create(
        model="tts-1",
        voice="alloy",
        input=text,
        response_format="wav",
    ) as res:
        res.stream_to_file("output.wav")

    # return a wave.Wave_read object to be logged as audio
    return wave.open("output.wav")

make_audio_file_streaming("Hello, how are you?")
この音声はWeaveにログ記録され、音声プレーヤーと共に自動的にUIに表示されます。音声プレーヤーでは、生の音声波形を表示およびダウンロードできます。 Screenshot of audio trace view
私たちのクックブックをお試しください:Audio Loggingまたは
Open In Colab
Open in Colab
。このクックブックには、Weaveと統合されたリアルタイム音声APIベースのアシスタントの高度な例も含まれています。