This commit is contained in:
2025-08-25 11:36:38 +08:00
parent fa858ddd90
commit 68d10d6471
2 changed files with 29 additions and 11 deletions

View File

@@ -85,35 +85,43 @@ async def translate_to_ggb(request: Request):
# 获取请求数据
data = await request.json()
natural_language_cmd = data.get("natural_language_cmd")
session_id = data.get("session_id")
except Exception:
# 如果JSON解析失败尝试从表单数据中获取
form = await request.form()
natural_language_cmd = form.get("natural_language_cmd")
session_id = form.get("session_id")
# 验证参数是否存在
if not natural_language_cmd:
raise HTTPException(status_code=400, detail="缺少natural_language_cmd参数")
# 确保会话ID存在
if not session_id:
# 如果没有提供会话ID生成一个临时ID实际应用中应该使用更安全的方式
session_id = str(uuid.uuid4())
logger.warning(f"未提供会话ID生成临时ID: {session_id}")
async def generate_translation_stream():
try:
logger.info(f"开始翻译自然语言指令: {natural_language_cmd}")
logger.info(f"开始翻译自然语言指令: {natural_language_cmd} (会话ID: {session_id})")
# 发送开始翻译的通知
yield f"{json.dumps({'status': 'translating', 'content': '开始翻译指令...'}, ensure_ascii=False)}"
await asyncio.sleep(0.1)
# 调用翻译函数并流式返回结果(使用别名
async for chunk in translate_to_ggb_util(natural_language_cmd):
# 调用翻译函数并流式返回结果(传递会话ID
async for chunk in translate_to_ggb_util(natural_language_cmd, session_id):
if chunk:
yield f"{json.dumps({'status': 'translating', 'content': chunk}, ensure_ascii=False)}"
yield f"{json.dumps({'status': 'translating', 'content': chunk, 'session_id': session_id}, ensure_ascii=False)}"
# 控制台输出
print(chunk, end="", flush=True)
await asyncio.sleep(0.1)
except Exception as e:
logger.error(f"翻译指令异常: {str(e)}")
yield f"{json.dumps({'error': f'翻译指令异常: {str(e)}'}, ensure_ascii=False)}"
yield f"{json.dumps({'error': f'翻译指令异常: {str(e)}', 'session_id': session_id}, ensure_ascii=False)}"
finally:
yield f"{json.dumps({'DONE': True}, ensure_ascii=False)}"
yield f"{json.dumps({'DONE': True, 'session_id': session_id}, ensure_ascii=False)}"
# 返回SSE响应
return EventSourceResponse(generate_translation_stream())