Files
2026-08-21 16:00:13 +08:00

62 lines
3.3 KiB
Python

"""世界模型 API schema(河图枢运行时,api-spec §12)。"""
from typing import Any
from pydantic import BaseModel, Field
class WorldEntityCreateRequest(BaseModel):
character_id: str | None = Field(default=None, description="所属人物;省略时用当前激活人物。")
type: str = Field(default="concept", description="实体类型,取值见契约字典 §11.1。")
name: str = Field(min_length=1, description="实体名称。")
attributes: dict[str, Any] = Field(default_factory=dict, description="实体属性集合。")
state_type: str = Field(default="inference", description="状态类型,取值见契约字典 §11.2。")
confidence: float = Field(default=0.5, ge=0.0, le=1.0, description="置信度。")
evidence_ids: list[str] = Field(default_factory=list, description="证据 ID 列表。")
sources: list[str] = Field(default_factory=list, description="来源标识列表。")
class WorldEntityResponse(BaseModel):
id: str = Field(description="实体 ID,前缀 world_entity_。")
character_id: str = Field(description="所属人物 ID。")
type: str = Field(description="实体类型。")
name: str = Field(description="实体名称。")
attributes: dict[str, Any] = Field(description="实体属性集合。")
state_type: str = Field(description="状态类型。")
status: str = Field(description="审核状态:pending/confirmed/rejected。")
confidence: float = Field(description="置信度。")
evidence_ids: list[str] = Field(description="证据 ID 列表。")
sources: list[str] = Field(description="来源标识列表。")
created_at: str = Field(description="创建时间,UTC ISO 8601 字符串。")
updated_at: str = Field(description="更新时间,UTC ISO 8601 字符串。")
class WorldRelationCreateRequest(BaseModel):
character_id: str | None = Field(default=None, description="所属人物;省略时用当前激活人物。")
subject_id: str = Field(description="关系主体实体 ID。")
predicate: str = Field(
min_length=1, description="关系谓词(自由字符串,如「位于」「依赖」「协助」)。"
)
object_id: str = Field(description="关系客体实体 ID。")
confidence: float = Field(default=0.5, ge=0.0, le=1.0)
evidence_ids: list[str] = Field(default_factory=list)
class WorldRelationResponse(BaseModel):
id: str = Field(description="关系 ID,前缀 world_relation_。")
character_id: str = Field(description="所属人物 ID。")
subject_id: str = Field(description="关系主体实体 ID。")
predicate: str = Field(description="关系谓词。")
object_id: str = Field(description="关系客体实体 ID。")
confidence: float = Field(description="置信度。")
evidence_ids: list[str] = Field(description="证据 ID 列表。")
created_at: str = Field(description="创建时间,UTC ISO 8601 字符串。")
updated_at: str = Field(description="更新时间,UTC ISO 8601 字符串。")
class WorldGraphResponse(BaseModel):
"""世界图谱数据:所有节点与边,供前端 D3/Force 图谱渲染。"""
nodes: list[WorldEntityResponse] = Field(description="图谱节点(世界实体)。")
edges: list[WorldRelationResponse] = Field(description="图谱边(实体间关系)。")