fix: 收口三视图错误提示

This commit is contained in:
hh
2026-07-15 18:18:35 +08:00
parent 755e210951
commit 79d7344134
7 changed files with 42 additions and 421 deletions
+22
View File
@@ -1591,6 +1591,28 @@ class ModelLibraryTriviewTaskTests(TestCase):
self.assertEqual(status_res.json()["status"], AITask.Status.RESERVED)
self.assertIsNone(status_res.json()["model"])
task = AITask.objects.get(id=task_id)
raw_error = (
"400 moderation_blocked Your request was rejected by the safety system. "
"request ID 47ffb351-2307-4c91-bd7e-76749729eef7"
)
task.status = AITask.Status.FAILED
task.error_message = raw_error
task.save(update_fields=["status", "error_message"])
failed_status = self.client.get(f"/api/models/{self.model.id}/triview-status/?task_id={task_id}")
self.assertEqual(failed_status.status_code, 200)
payload = failed_status.json()
self.assertEqual(payload["error"]["code"], "content_rejected")
self.assertEqual(payload["error"]["operation"], "triview_generate")
self.assertEqual(
payload["error_message"],
"三视图内容需要调整:内容未通过生成审核,请调整描述或素材后重试。",
)
self.assertNotIn("moderation_blocked", payload["error_message"])
self.assertNotIn("Azure", str(payload))
self.assertNotIn("47ffb351-2307-4c91-bd7e-76749729eef7", str(payload))
class _FakeStreamResp:
"""模拟 requests 流式响应:支持 with、raise_for_status、可写 encoding、iter_lines。"""
+5 -1
View File
@@ -556,13 +556,17 @@ class ModelLibraryViewSet(ModelViewSet):
if task is None:
raise ValidationError({"task_id": "任务不存在或不属于当前模特"})
model.refresh_from_db()
from apps.ai.generation_errors import public_error_for_task
public_error = public_error_for_task(task, operation="triview_generate")
return Response(
{
"task_id": str(task.id),
"status": task.status,
"estimated_cost": str(task.estimated_cost),
"actual_cost": str(task.actual_cost),
"error_message": task.error_message,
"error": public_error.as_dict() if public_error else None,
"error_message": public_error.fallback_message if public_error else "",
"model": ModelLibrarySerializer(model).data if task.status == AITask.Status.SUCCEEDED else None,
},
status=status.HTTP_200_OK,