feat(ux): T4-b 后端 — draft 端点接收本章指令 directive 直通 assemble(volatile)
assemble/_build_volatile 加 directive 参数(仅入 volatile,守缓存前缀不变量 #9);stream_draft 加可选 body {directive} 透传;不持久化、无迁移;directive 长度入 log 不记原文。新 DraftStreamRequest schema + 重生成 TS 客户端。后端门禁绿: ruff/mypy/pytest。契约记 memory/contracts.md。
This commit is contained in:
@@ -53,6 +53,7 @@ from ww_api.schemas.projects import (
|
||||
AcceptResponse,
|
||||
DraftResponse,
|
||||
DraftSaveRequest,
|
||||
DraftStreamRequest,
|
||||
DraftView,
|
||||
ProjectCreateRequest,
|
||||
ProjectListResponse,
|
||||
@@ -240,11 +241,17 @@ async def stream_draft(
|
||||
gateway: GatewayDep,
|
||||
injection_repo: InjectionRepoDep,
|
||||
session: Annotated[AsyncSession, Depends(get_session)],
|
||||
body: DraftStreamRequest | None = None,
|
||||
) -> StreamingResponse:
|
||||
"""流式写章草稿:组装记忆(含作者注入覆盖)→ 网关流 → 归一为 SSE 事件 → text/event-stream。"""
|
||||
"""流式写章草稿:组装记忆(含作者注入覆盖 + 本章指令)→ 网关流 → 归一 SSE → event-stream。
|
||||
|
||||
`body.directive`(可选,T4-b)是临时本章指令,直通 assemble→volatile(不持久化);
|
||||
无 body 的旧调用方仍可用(向后兼容)。
|
||||
"""
|
||||
request_id = getattr(request.state, "request_id", None)
|
||||
directive = body.directive if body else None
|
||||
override = await injection_repo.get(project_id, chapter_no)
|
||||
context = await assemble(repos, project_id, chapter_no, override=override)
|
||||
context = await assemble(repos, project_id, chapter_no, override=override, directive=directive)
|
||||
log.info(
|
||||
"draft_stream_start",
|
||||
project_id=str(project_id),
|
||||
@@ -252,6 +259,7 @@ async def stream_draft(
|
||||
request_id=request_id,
|
||||
stable_core_len=len(context.stable_core),
|
||||
volatile_len=len(context.volatile),
|
||||
directive_len=len(body.directive) if body and body.directive else 0,
|
||||
)
|
||||
|
||||
deltas = stream_chapter_draft(
|
||||
|
||||
Reference in New Issue
Block a user