diff --git a/apps/api/tests/test_input_size_limits.py b/apps/api/tests/test_input_size_limits.py index 9193b38..a787602 100644 --- a/apps/api/tests/test_input_size_limits.py +++ b/apps/api/tests/test_input_size_limits.py @@ -23,6 +23,7 @@ from ww_api.schemas.generation import CharacterGenerateRequest, WorldGenerateReq from ww_api.schemas.projects import ( AcceptRequest, DraftSaveRequest, + DraftStreamRequest, ProjectCreateRequest, ReviewRequest, ) @@ -64,6 +65,8 @@ _STR_CASES: list[_StrCase] = [ _StrCase(DraftSaveRequest, "text", 200_000, "draft-text<=200000"), _StrCase(ReviewRequest, "draft", 200_000, "review-draft<=200000"), _StrCase(RefineRequest, "segment", 20_000, "segment<=20000"), + _StrCase(RefineRequest, "instruction", 2_000, "refine-instruction<=2000", {"segment": "s"}), + _StrCase(DraftStreamRequest, "directive", 20_000, "directive<=20000"), _StrCase(ForeshadowRegisterRequest, "code", 100, "code<=100", {"title": "t"}), _StrCase(ForeshadowRegisterRequest, "title", 500, "foreshadow-title<=500", {"code": "c"}), _StrCase(RuleCreateRequest, "content", 10_000, "rule-content<=10000", {"level": "project"}), diff --git a/apps/api/ww_api/schemas/projects.py b/apps/api/ww_api/schemas/projects.py index a5f6aa3..2e7d587 100644 --- a/apps/api/ww_api/schemas/projects.py +++ b/apps/api/ww_api/schemas/projects.py @@ -14,6 +14,7 @@ from pydantic import BaseModel, Field # 请求文本长度上界(CR-H9:防超长入参 DoS/成本)。标题=标签级;章正文=整章级。 _TITLE_MAX = 200 _CHAPTER_TEXT_MAX = 200_000 +_DIRECTIVE_MAX = 20_000 # CR-H9 收尾:本章指令喂 LLM,加上界(正文级 body 中间件仍兜底) class ProjectCreateRequest(BaseModel): @@ -121,7 +122,7 @@ class DraftStreamRequest(BaseModel): 后端只入 volatile(守缓存前缀不变量 #9)。无 body 时退化为纯按大纲生成(向后兼容)。 """ - directive: str | None = None + directive: str | None = Field(default=None, max_length=_DIRECTIVE_MAX) # 整章重写输入上界(守 DoS/成本,CR-H9 方向):意见短、整章草稿大(复用章正文上界,DRY)。 diff --git a/apps/api/ww_api/schemas/style.py b/apps/api/ww_api/schemas/style.py index 26ad154..c63bab0 100644 --- a/apps/api/ww_api/schemas/style.py +++ b/apps/api/ww_api/schemas/style.py @@ -59,7 +59,8 @@ class RefineRequest(BaseModel): """回炉:重写选中段(可选改写指令)。""" segment: str = Field(min_length=1, max_length=_SEGMENT_MAX) - instruction: str | None = None + # CR-H9 收尾:再沟通意见喂 LLM,加上界(与 clarify instruction 同口径 2000)。 + instruction: str | None = Field(default=None, max_length=_MAX_CLARIFY_INSTRUCTION_LEN) class RefineResponse(BaseModel):