M0:灵台 Kernel 骨架(事件溯源/命台席位/瀑布总线/插件注册)与神识客户端边界,新增 POST /runs 占位闭环与测试,Alembic 基线合并为单一起点

This commit is contained in:
chenxin committed 2026-08-21 21:58:09 +08:00
1 parent 99e55fa0a8
commit 7ef3a15061
23 files changed
+2014 -1399

No files matched your search

+52
View File
@@ -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)} 字符",
)