feat: add async image task API

This commit is contained in:
QiuSW
2026-07-08 22:08:48 +08:00
parent c98f713762
commit 25a4080177
26 changed files with 1531 additions and 48 deletions
+43
View File
@@ -18,6 +18,12 @@ from apps.api.generation import (
generate_image_response,
generate_title_response,
)
from apps.api.image_tasks import (
create_image_generation_task,
task_detail_response,
task_submit_response,
)
from apps.api.models import ImageGenerationTask
from apps.api.serializers import (
GenerateImageRequestSerializer,
GenerateTitleRequestSerializer,
@@ -107,6 +113,43 @@ class GenerateImageView(ExternalApiView):
return Response(data, status=status.HTTP_200_OK)
class GenerateImageTaskSubmitView(ExternalApiView):
throttle_classes = (GenerateRateThrottle,)
def post(self, request):
serializer = GenerateImageRequestSerializer(data=request.data)
if not serializer.is_valid():
return Response(
api_error("bad_request", "参数错误"),
status=status.HTTP_400_BAD_REQUEST,
)
try:
task, _created = create_image_generation_task(
user=request.user,
api_key=request.auth,
request_data=serializer.validated_data,
idempotency_key=request.headers.get("Idempotency-Key", ""),
)
except ApiRequestError as exc:
return Response(exc.as_response_data(), status=exc.http_status)
return Response(task_submit_response(task), status=status.HTTP_202_ACCEPTED)
class GenerateImageTaskDetailView(ExternalApiView):
def get(self, request, task_id):
task = (
ImageGenerationTask.objects.select_related("call_record")
.filter(task_id=task_id, user=request.user)
.first()
)
if task is None:
return Response(
api_error("task_not_found", "图片生成任务不存在"),
status=status.HTTP_404_NOT_FOUND,
)
return Response(task_detail_response(task), status=status.HTTP_200_OK)
class BalanceView(ExternalApiView):
def get(self, request):
balance = get_balance_snapshot(request.user)