API

pytrio.ModelInput

class ModelInput(BaseModel):
    chunks: list[EncodedTextChunk | ImageChunk]

ModelInput 是模型输入的数据结构,按顺序封装编码文本和图片 chunk。它被 DatumSamplingClient.sample() 等接口用作输入类型。

纯文本输入可以继续使用 from_ints()

import pytrio as trio

model_input = trio.ModelInput.from_ints(input_ids[:-1])

datum = trio.Datum(
    model_input=model_input,
    loss_fn_inputs={"target_tokens": input_ids[1:]},
)

图文输入需要显式排列文本与图片 chunk。下面的输入顺序是“图片前文本 → 图片 → 图片后文本”:

from pathlib import Path

import pytrio as trio

model_input = trio.ModelInput(
    chunks=[
        trio.types.EncodedTextChunk(tokens=[1, 2, 3]),
        trio.ImageChunk(
            data=Path("example.png").read_bytes(),
            format="png",
        ),
        trio.types.EncodedTextChunk(tokens=[4, 5, 6]),
    ]
)

图片推理只需传入 dataformat。训练数据或本地调用 len(model_input) 时,还要传入按对应模型图像处理器计算的 expected_tokens。完整构造方法见多模态指南

字段

字段类型说明
chunkslist[EncodedTextChunk | ImageChunk]按模型读取顺序排列的文本与图片 chunk

Chunk 类型

类型主要字段说明
EncodedTextChunktokens: list[int]已经过 tokenizer 编码的文本 token;type="encoded_text"
ImageChunkdata: bytesformat: "png" | "jpeg"expected_tokens: int | NonePNG/JPEG 原始字节;type="image"

属性

属性类型说明
lengthint文本 token 与图片 expected_tokens 的总数,等同于 len()
has_imagesbool是否包含 ImageChunk
is_emptybool是否既没有文本 token,也没有图片

当输入包含未设置 expected_tokensImageChunk 时,lengthlen() 会抛出 ValueError

方法

from_ints

@classmethod
def from_ints(cls, tokens: list[int]) -> ModelInput

从 token id 列表构造只包含一个 EncodedTextChunk 的纯文本 ModelInput

示例

model_input = ModelInput.from_ints([1, 2, 3, 4])

to_ints / tolist

def to_ints(self) -> list[int]
def tolist(self) -> list[int]

展开所有文本 chunk,返回完整的 token id 列表。两者等价,仅适用于纯文本输入;如果输入包含 ImageChunk,会抛出 ValueError

示例

tokens = model_input.to_ints()   # [1, 2, 3, 4]
tokens = model_input.tolist()    # 同上
这篇文档对你有帮助吗?

本页目录