Files
my-v0-server/app/schemas/request.py
T

42 lines
1.5 KiB
Python

"""前端设计请求:原始需求、当前大屏及可选补充上下文"""
from pydantic import Field, field_validator
from .base import ExtensibleModel, JsonObject, NonBlankString
from .screen import Screen
class RequestContext(ExtensibleModel):
selected_node_ids: list[NonBlankString] = Field(default_factory=list)
screen_id: NonBlankString | None = None
screen_revision: int | None = Field(default=None, ge=0)
conversation_id: NonBlankString | None = None
class DesignRequest(ExtensibleModel):
prompt: NonBlankString
screen: Screen
context: RequestContext = Field(default_factory=RequestContext)
# 本条消息附带的材料;{"kind": "data_file", "file_id": "..."} 引用本会话上传的数据文件,
# 其他种类只原样进入摘要,不读取文件或远程资源
attachments: list[JsonObject] = Field(default_factory=list)
@field_validator("attachments")
@classmethod
def _data_files_have_ids(cls, value: list[JsonObject]) -> list[JsonObject]:
for item in value:
if item.get("kind") == "data_file" and not isinstance(
item.get("file_id"), str
):
raise ValueError("data_file 附件缺少 file_id")
return value
@property
def data_file_ids(self) -> set[str]:
"""本条消息附带的数据文件"""
return {
str(item["file_id"])
for item in self.attachments
if item.get("kind") == "data_file"
}