62 lines
2.1 KiB
Python
62 lines
2.1 KiB
Python
"""
|
|
Worker 结构化唤醒载荷。
|
|
|
|
本文件职责:定义「识别/PDF 完成」唤醒图的数据结构;禁止用用户聊天文字冒充文件完成。
|
|
调用方:jobs 槽完成后 → GraphRuntime.wake_from_worker。
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from typing import Any, Optional
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class WorkerWakePayload:
|
|
"""
|
|
结构化 wake(对齐 prompt/14)。
|
|
|
|
inquiry_no + quote_version + wait_version 三者用于对齐停点;缺任一则 runtime 拒绝。
|
|
kind:识别完成 / PDF 完成等枚举字符串,骨架只做透传校验。
|
|
"""
|
|
|
|
thread_id: str
|
|
inquiry_no: str
|
|
quote_version: int
|
|
wait_version: int
|
|
kind: str
|
|
detail: Optional[dict[str, Any]] = None
|
|
|
|
def validate(self) -> None:
|
|
"""
|
|
校验必填字段。
|
|
|
|
副作用:无效时抛 ValueError;不写库。
|
|
"""
|
|
if not (self.thread_id or "").strip():
|
|
raise ValueError("wake 缺少 thread_id")
|
|
if not (self.inquiry_no or "").strip():
|
|
raise ValueError("wake 缺少 inquiry_no")
|
|
if self.quote_version is None or int(self.quote_version) < 0:
|
|
raise ValueError("wake quote_version 无效")
|
|
if self.wait_version is None or int(self.wait_version) < 0:
|
|
raise ValueError("wake wait_version 无效")
|
|
if not (self.kind or "").strip():
|
|
raise ValueError("wake 缺少 kind")
|
|
|
|
def as_state_patch(self) -> dict[str, Any]:
|
|
"""转为写入图状态的增量(骨架:只记录 last_wake,不推进六态)。"""
|
|
self.validate()
|
|
return {
|
|
"inquiry_no": self.inquiry_no,
|
|
"quote_version": int(self.quote_version),
|
|
"wait_version": int(self.wait_version),
|
|
"last_wake": {
|
|
"kind": self.kind,
|
|
"inquiry_no": self.inquiry_no,
|
|
"quote_version": int(self.quote_version),
|
|
"wait_version": int(self.wait_version),
|
|
"detail": self.detail or {},
|
|
},
|
|
}
|