feat: 完成input_context节点
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
"""前端请求与大屏公共模型"""
|
||||
|
||||
from .input_context import InputContext
|
||||
from .request import DesignRequest, RequestContext
|
||||
from .requirement import Requirement, RequirementChange
|
||||
from .screen import Canvas, Layout, Screen, ScreenNode
|
||||
|
||||
__all__ = [
|
||||
"Canvas",
|
||||
"DesignRequest",
|
||||
"InputContext",
|
||||
"Layout",
|
||||
"RequestContext",
|
||||
"Requirement",
|
||||
"RequirementChange",
|
||||
"Screen",
|
||||
"ScreenNode",
|
||||
]
|
||||
@@ -0,0 +1,23 @@
|
||||
"""输入协议的公共类型"""
|
||||
|
||||
from typing import Annotated
|
||||
|
||||
from pydantic import AfterValidator, BaseModel, ConfigDict, JsonValue
|
||||
|
||||
|
||||
def require_non_blank(value: str) -> str:
|
||||
if not value.strip():
|
||||
raise ValueError("不能为空或仅包含空白字符")
|
||||
return value
|
||||
|
||||
|
||||
NonBlankString = Annotated[str, AfterValidator(require_non_blank)]
|
||||
JsonObject = dict[str, JsonValue]
|
||||
|
||||
|
||||
class ExtensibleModel(BaseModel):
|
||||
"""校验已知字段,保留未知 JSON 字段;不隐式转换输入类型"""
|
||||
|
||||
model_config = ConfigDict(extra="allow", strict=True, allow_inf_nan=False)
|
||||
|
||||
__pydantic_extra__: dict[str, JsonValue]
|
||||
@@ -0,0 +1,7 @@
|
||||
"""输入节点校验后的上下文"""
|
||||
|
||||
from .request import DesignRequest
|
||||
|
||||
|
||||
class InputContext(DesignRequest):
|
||||
"""当前复用请求协议,后续可添加解析结果而不改变前端传参"""
|
||||
@@ -0,0 +1,21 @@
|
||||
"""前端设计请求:原始需求、当前大屏及可选补充上下文"""
|
||||
|
||||
from pydantic import Field
|
||||
|
||||
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)
|
||||
# 只预留 JSON 描述入口,暂不规定材料种类,也不读取文件或远程资源
|
||||
attachments: list[JsonObject] = Field(default_factory=list)
|
||||
Reference in New Issue
Block a user