M0:灵台 Kernel 骨架(事件溯源/命台席位/瀑布总线/插件注册)与神识客户端边界,新增 POST /runs 占位闭环与测试,Alembic 基线合并为单一起点
This commit is contained in:
1 parent
99e55fa0a8
commit
7ef3a15061
23 files changed
+2014
-1399
No files matched your search
@@ -0,0 +1,52 @@
|
||||
"""Kernel 不可插拔不变量(lingtai-runtime.md §1 硬核例外)。
|
||||
|
||||
M0 落地其中两条的可执行断言:
|
||||
- "模型可见即可重建":投影中的每条模型可见消息必须能在事件日志(llm.requested)中找到;
|
||||
- 流一致性:llm.delta 事件重组文本必须与进入接纳检查的文本一致。
|
||||
|
||||
镜树不变量(重生成不覆盖/未归真不入忆/归真不回滚)随 M2 镜树域落地时进入本模块;
|
||||
禁域裁决点随 M5 司命落地。断言失败即抛 ``InvariantViolation``:Kernel 视其为缺陷
|
||||
而非业务错误,Run 进入 interrupted 并带 HJ-9000 段错误码。
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from app.modules.runtime.events import Event
|
||||
from app.shenshi_client.types import ShenshiChatRequest
|
||||
|
||||
|
||||
class InvariantViolation(Exception):
|
||||
"""Kernel 不变量被违反:缺陷信号,必须中断并留痕。"""
|
||||
|
||||
def __init__(self, invariant: str, detail: str) -> None:
|
||||
super().__init__(f"[{invariant}] {detail}")
|
||||
self.invariant = invariant
|
||||
self.detail = detail
|
||||
|
||||
|
||||
def assert_model_visible_logged(
|
||||
request: ShenshiChatRequest, events: list[Event]
|
||||
) -> None:
|
||||
"""投影消息 ⊆ 已记录的 llm.requested 消息("模型可见即可重建")。"""
|
||||
requested = next((e for e in events if e.type == "llm.requested"), None)
|
||||
if requested is None:
|
||||
raise InvariantViolation(
|
||||
"model-visible-means-logged", "存在模型请求但事件日志缺少 llm.requested"
|
||||
)
|
||||
logged = requested.payload.get("request", {}).get("messages", [])
|
||||
if logged != [m.model_dump() for m in request.messages]:
|
||||
raise InvariantViolation(
|
||||
"model-visible-means-logged", "llm.requested 事件与实际发送的 IR 消息不一致"
|
||||
)
|
||||
|
||||
|
||||
def assert_stream_reconstruction(events: list[Event], accepted_text: str) -> None:
|
||||
"""llm.delta 重组文本 == 进入接纳的文本(流不丢帧、不重帧)。"""
|
||||
reconstructed = "".join(
|
||||
e.payload.get("delta", "") for e in events if e.type == "llm.delta"
|
||||
)
|
||||
if reconstructed != accepted_text:
|
||||
raise InvariantViolation(
|
||||
"stream-reconstruction",
|
||||
f"事件重组文本与接纳文本不一致:{len(reconstructed)} != {len(accepted_text)} 字符",
|
||||
)
|
||||
Reference in new issue
Block a user