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:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user