feat: 改写工作台体验优化 — 中文对照翻译 + 字数控制提示 + 复检历史/按建议再次改写 + 输入法组合期不误发送
- 新增 POST /api/translate(build_translate_prompt): 英文改写稿忠实直译成中文,供顾问自查改写后原意是否保留 - 改写区「译成中文对照」按钮 + 译文展开/收起;改写稿变化后旧译文自动过期(缓存按文本比对) - 每段字数控制提示: rewrite-meta 显示「原文 X 词 · 当前 Y 词」,偏差过大黄色提醒; 顶部进度加「全文 X / wordLimit 词」,超出题目字数限制标红 - 复检汇总建议历史: 每次复检入历史(状态/未通过检查项/返工目标/绑定版本,上限 10 条); Workbench 提交区 + 复检卡两处入口;历史条目「按此建议再次改写」回到目标段并显示返工 banner - 对话输入框: 中文输入法组合期(isComposing/keyCode 229)回车不再误发送 - 测试: 新增 /api/translate 3 个 hermetic 测试(31 passed);浏览器实测 18/18 通过
This commit is contained in:
@@ -20,6 +20,7 @@ from prompts import (
|
||||
build_recheck_prompt,
|
||||
build_reference_prompt,
|
||||
build_scaffold_prompt,
|
||||
build_translate_prompt,
|
||||
normalize_diagnose_payload,
|
||||
)
|
||||
from schemas import (
|
||||
@@ -35,6 +36,8 @@ from schemas import (
|
||||
RevisionTarget,
|
||||
ScaffoldRequest,
|
||||
ScaffoldResponse,
|
||||
TranslateRequest,
|
||||
TranslateResponse,
|
||||
)
|
||||
|
||||
app = FastAPI(title="Human Voice Rewrite Demo", version="1.1.0")
|
||||
@@ -198,6 +201,22 @@ def reference(req: ReferenceRequest) -> ReferenceResponse:
|
||||
return resp
|
||||
|
||||
|
||||
@app.post("/api/translate", response_model=TranslateResponse)
|
||||
def translate(req: TranslateRequest) -> TranslateResponse:
|
||||
"""体验优化:改写区「译成中文对照」——顾问自查改写后原意/细节是否保留。"""
|
||||
if not req.text.strip():
|
||||
raise HTTPException(status_code=422, detail="没有可翻译的文本")
|
||||
system, user = build_translate_prompt(req.text)
|
||||
data = run_json("翻译", system, user)
|
||||
translation = data.get("translation")
|
||||
if isinstance(translation, list): # 模型偶发把字符串字段返回成数组
|
||||
translation = "".join(str(x) for x in translation)
|
||||
resp = TranslateResponse(paragraph_id=req.paragraph_id, translation=str(translation or "").strip())
|
||||
if not resp.translation:
|
||||
raise HTTPException(status_code=502, detail="翻译结果为空,请重试")
|
||||
return resp
|
||||
|
||||
|
||||
@app.get("/")
|
||||
def index() -> FileResponse:
|
||||
return FileResponse(HERE / "index.html", media_type="text/html")
|
||||
|
||||
Reference in New Issue
Block a user