chore: 删除脚本生成 SSE 流式相关废弃代码

This commit is contained in:
小鱼开发
2026-05-04 19:37:30 +08:00
parent 52ba99e11d
commit 6c0f240369
4 changed files with 6 additions and 250 deletions
+3 -85
View File
@@ -3,7 +3,6 @@
============
提供脚本生成、润色、模型健康检查等功能。
支持 SSE 流式响应。
"""
from __future__ import annotations
@@ -11,21 +10,17 @@ from __future__ import annotations
import asyncio
import logging
from fastapi import APIRouter, Request
from fastapi.responses import StreamingResponse
from fastapi import APIRouter
from app.schemas.common import ApiResponse, success_response
from app.ai.model_router import get_model_router
from app.ai.prompts import list_categories, load_prompt, render_template
from app.schemas.common import ApiResponse, success_response
from app.schemas.script import (
CategoryItem,
GenerateScriptRequest,
GenerateTitleRequest,
GenerateTitleResponse,
ModelHealthResponse,
PolishRequest,
ScriptGenerationEvent,
ScriptShot,
TestModelRequest,
TestModelResponse,
)
@@ -49,83 +44,6 @@ async def get_categories():
)
@router.post("/generate/stream")
async def generate_script_stream(request: Request, data: GenerateScriptRequest):
"""
流式生成脚本(SSE
返回 Server-Sent Events,包含进度更新和最终结果。
前端通过 EventSource 接收实时进度。
**SSE 事件类型:**
- `start`: 开始生成
- `generating`: AI 生成中
- `complete`: 完成,包含 result 字段
- `error`: 错误
**示例事件流:**
```
data: {"type": "start", "message": "正在创作脚本..."}
data: {"type": "generating", "message": "正在创作脚本..."}
data: {"type": "complete", "message": "脚本生成成功", "result": [...]}
```
"""
service = get_script_service()
async def event_generator():
"""SSE 事件生成器,带客户端断开检测"""
try:
async for event in service.generate_script_stream(
category=data.category,
subcategory=data.subcategory,
duration=data.duration,
script_type=data.script_type,
model=data.model,
):
# 检查客户端是否已断开
if await request.is_disconnected():
logger.info("[SSE] 客户端已断开连接,停止生成")
break
# SSE 格式:data: {...}\n\n
try:
yield f"data: {event.model_dump_json()}\n\n"
await asyncio.sleep(0.05) # 确保事件被 flush,前端有时间渲染
except Exception as e:
logger.error(f"[SSE] 序列化事件失败: {e}")
continue
# 发送结束标记(如果客户端还连接着)
if not await request.is_disconnected():
yield "data: [DONE]\n\n"
except Exception as e:
logger.exception("[SSE] 事件生成器异常")
# 尝试发送错误信息给客户端
try:
error_event = ScriptGenerationEvent(
type="error",
progress=0,
message=f"服务器错误: {str(e)}",
)
yield f"data: {error_event.model_dump_json()}\n\n"
yield "data: [DONE]\n\n"
except:
pass
return StreamingResponse(
event_generator(),
media_type="text/event-stream",
headers={
"Cache-Control": "no-cache",
"Connection": "keep-alive",
"X-Accel-Buffering": "no", # 禁用 Nginx 缓冲
},
)
@router.post("/polish", response_model=ApiResponse[str])
async def polish_content(request: PolishRequest):
"""
@@ -265,7 +183,7 @@ async def generate_title(request: GenerateTitleRequest):
data=GenerateTitleResponse(title=title),
message="标题生成成功",
)
except asyncio.TimeoutError:
except TimeoutError:
logger.warning("[generate_title] 标题生成超时")
return success_response(
code=500,