diff --git a/apps/jmidjourney/api.py b/apps/jmidjourney/api.py index 30fb303..b6e653f 100644 --- a/apps/jmidjourney/api.py +++ b/apps/jmidjourney/api.py @@ -40,7 +40,11 @@ async def ve_generate_image(data: dict, request: Request): yield json.dumps(result, ensure_ascii=False) + "\n" return StreamingResponse( - generate(), + generate(), media_type="application/x-ndjson", - headers={"X-Content-Type-Options": "nosniff"} + headers={ + "Cache-Control": "no-cache", + "X-Accel-Buffering": "no", + "X-Content-Type-Options": "nosniff" + } ) diff --git a/apps/jmidjourney/service.py b/apps/jmidjourney/service.py index 0ec6dcf..be6fd9c 100644 --- a/apps/jmidjourney/service.py +++ b/apps/jmidjourney/service.py @@ -335,6 +335,7 @@ class MidjourneyService: "status": "error", "message": "未配置 VectorEngine Token" } + await asyncio.sleep(0) # 让出控制权,确保数据立即推送 return # 1. 提交任务 @@ -353,6 +354,7 @@ class MidjourneyService: "status": "error", "message": submit_result.get("message", "提交任务失败,未获取到任务ID") } + await asyncio.sleep(0) # 让出控制权,确保数据立即推送 return logger.info(f"VectorEngine 任务已提交,任务ID: {task_id}") @@ -360,6 +362,7 @@ class MidjourneyService: "status": "submitted", "task_id": task_id } + await asyncio.sleep(0) # 让出控制权,确保数据立即推送 # 2. 轮询任务状态 polling_count = 0 @@ -395,6 +398,7 @@ class MidjourneyService: "progress": progress_val, "task_id": task_id } + await asyncio.sleep(0) # 让出控制权,确保数据立即推送 # 检查任务完成状态 if status == "SUCCESS": @@ -420,6 +424,7 @@ class MidjourneyService: logger.error(f"分割图像失败: {str(e)}") yield response + await asyncio.sleep(0) # 让出控制权,确保数据立即推送 return elif status in ("FAILURE", "FAILED"): @@ -429,6 +434,7 @@ class MidjourneyService: "message": fail_reason, "task_id": task_id } + await asyncio.sleep(0) # 让出控制权,确保数据立即推送 return elif status == "CANCELLED": @@ -437,6 +443,7 @@ class MidjourneyService: "message": "任务已取消", "task_id": task_id } + await asyncio.sleep(0) # 让出控制权,确保数据立即推送 return # 其他状态(如 IN_PROGRESS, SUBMITTED)继续轮询 @@ -448,3 +455,4 @@ class MidjourneyService: "message": f"任务超时,已轮询 {settings.vectorengine_max_polling_attempts} 次", "task_id": task_id } + await asyncio.sleep(0) # 让出控制权,确保数据立即推送