refactor(script): add timeout and error handling for polish/title

- Add 15s asyncio.timeout() to polish_content and generate_title
- Add try/except to /polish route for unified error response
- Add asyncio.TimeoutError handling to /generate-title route
This commit is contained in:
小鱼开发
2026-05-02 21:23:50 +08:00
parent feddeed950
commit 02b5a89eaf
2 changed files with 54 additions and 26 deletions
+41 -18
View File
@@ -138,18 +138,33 @@ async def polish_content(request: PolishRequest):
- `shot_type`: "segment"(分镜)或 "empty_shot"(空镜),画面润色时必填
"""
service = get_script_service()
polished = await service.polish_content(
content=request.content,
polish_type=request.polish_type,
shot_type=request.shot_type or "segment",
)
type_name = "画面" if request.polish_type == "scene" else "文案"
return success_response(
data=polished,
message=f"{type_name}润色完成",
)
try:
polished = await service.polish_content(
content=request.content,
polish_type=request.polish_type,
shot_type=request.shot_type or "segment",
)
return success_response(
data=polished,
message=f"{type_name}润色完成",
)
except ValueError as e:
logger.warning(f"[Polish] 润色失败: {e}")
return success_response(
code=500,
message=str(e),
data=None,
)
except Exception as e:
logger.error(f"[Polish] 润色异常: {e}")
return success_response(
code=500,
message=f"{type_name}润色失败: {str(e)}",
data=None,
)
@router.get("/model-health", response_model=ApiResponse[ModelHealthResponse])
@@ -230,13 +245,14 @@ async def generate_title(request: GenerateTitleRequest):
)
try:
result = await model_router.generate(
prompt=user_prompt,
system_prompt=system_prompt,
task_type="script",
temperature=0.8,
max_tokens=64,
)
async with asyncio.timeout(15):
result = await model_router.generate(
prompt=user_prompt,
system_prompt=system_prompt,
task_type="script",
temperature=0.8,
max_tokens=64,
)
title = result.content.strip() if result.content else ""
# 去除可能的引号
@@ -249,6 +265,13 @@ async def generate_title(request: GenerateTitleRequest):
data=GenerateTitleResponse(title=title),
message="标题生成成功",
)
except asyncio.TimeoutError:
logger.warning("[generate_title] 标题生成超时")
return success_response(
code=500,
message="标题生成超时,请重试",
data=None,
)
except Exception as e:
logger.error(f"[generate_title] 标题生成失败: {e}")
return success_response(