for msg in request.messages: # 处理多格式content字段 current_content = "" ifisinstance(msg.content, str): current_content = msg.content elifisinstance(msg.content, list): # 提取列表中的文本内容 for part in msg.content: ifisinstance(part, dict) and part.get("type") == "text": current_content += part.get("text", "") # 角色映射和消息构建 if msg.role == "system": system_prompt = current_content elif msg.role in ["user", "assistant"]: messages_history.append({ "id": str(uuid.uuid4()), "from": "you"if msg.role == "user"else"assistant", "content": current_content, })
# 将system prompt合并到最后一条用户消息 if system_prompt and messages_history and messages_history[-1]["from"] == "you": messages_history[-1]["content"] = f"{system_prompt}\n\n{messages_history[-1]['content']}"
except httpx.HTTPStatusError as e: error_detail = f"TalkAI API error (HTTP {e.response.status_code})" if e.response.status_code == 401: error_detail = "TalkAI API authentication failed - API key may be invalid or expired" elif e.response.status_code == 403: error_detail = "TalkAI API access forbidden - API key may lack permissions" elif e.response.status_code == 429: error_detail = "TalkAI API rate limit exceeded - please try again later" elif e.response.status_code >= 500: error_detail = "TalkAI API server error - downstream service may be temporarily unavailable" raise HTTPException(status_code=e.response.status_code, detail=error_detail)
except httpx.ConnectTimeout: error_detail = "Connection timeout to TalkAI API - network issue or service unavailable" raise HTTPException(status_code=504, detail=error_detail)