API
pytrio.ModelInput
class ModelInput(BaseModel):
chunks: list[EncodedTextChunk | ImageChunk]ModelInput 是模型输入的数据结构,按顺序封装编码文本和图片 chunk。它被 Datum 和 SamplingClient.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]),
]
)图片推理只需传入 data 和 format。训练数据或本地调用 len(model_input) 时,还要传入按对应模型图像处理器计算的 expected_tokens。完整构造方法见多模态指南。
字段
| 字段 | 类型 | 说明 |
|---|---|---|
chunks | list[EncodedTextChunk | ImageChunk] | 按模型读取顺序排列的文本与图片 chunk |
Chunk 类型
| 类型 | 主要字段 | 说明 |
|---|---|---|
EncodedTextChunk | tokens: list[int] | 已经过 tokenizer 编码的文本 token;type="encoded_text" |
ImageChunk | data: bytes、format: "png" | "jpeg"、expected_tokens: int | None | PNG/JPEG 原始字节;type="image" |
属性
| 属性 | 类型 | 说明 |
|---|---|---|
length | int | 文本 token 与图片 expected_tokens 的总数,等同于 len() |
has_images | bool | 是否包含 ImageChunk |
is_empty | bool | 是否既没有文本 token,也没有图片 |
当输入包含未设置 expected_tokens 的 ImageChunk 时,length 和 len() 会抛出 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() # 同上这篇文档对你有帮助吗?