yumoqing 20df29e524 Add verify_delivery HTTP service with 4 QA checks
- QA1: Timeline validation (monotonic, no overlap)
- QA2: Lyrics accuracy (ASS vs original)
- QA3: MTV original audio verification
- QA4: KTV dual-track validation (accompaniment + original)

Service runs on port 9085 with longtasks queue
2026-06-14 16:21:19 +08:00

61 lines
2.1 KiB
Plaintext

# -*- coding:utf-8 -*-
# POST /api/submit - 提交KTV交付质检任务
import json
import uuid
from ahserver.serverenv import ServerEnv
method = request.method
if method == "POST":
mtv_path = params_kw.get("mtv_path", "")
ktv_path = params_kw.get("ktv_path", "")
ass_path = params_kw.get("ass_path", "")
lyrics_path = params_kw.get("lyrics_path", "")
calibrated_path = params_kw.get("calibrated_path", "")
original_duration = params_kw.get("original_duration", 0)
if not any([mtv_path, ktv_path]):
return json.dumps({"error": "至少需要提供mtv_path或ktv_path"}, ensure_ascii=False)
task_id = params_kw.get("task_id", str(uuid.uuid4()).replace("-", "")[:12])
payload = {
"task_type": "verify",
"task_id": task_id,
"mtv_path": mtv_path,
"ktv_path": ktv_path,
"ass_path": ass_path,
"lyrics_path": lyrics_path,
"calibrated_path": calibrated_path,
"original_duration": float(original_duration) if original_duration else 0
}
env = ServerEnv()
longtasks = env.longtasks
if longtasks is None:
return json.dumps({"error": "service not ready"}, ensure_ascii=False)
result = await longtasks.submit_task(payload)
real_task_id = result.get("task_id", str(result)) if isinstance(result, dict) else str(result)
return json.dumps({
"task_id": real_task_id,
"status": "queued",
"message": "质检任务已提交",
"check_url": f"/api/task?task_id={real_task_id}"
}, ensure_ascii=False)
else:
return json.dumps({
"usage": "POST with JSON body",
"params": {
"mtv_path": "string (optional, MTV视频路径)",
"ktv_path": "string (optional, KTV视频路径)",
"ass_path": "string (optional, ASS字幕路径)",
"lyrics_path": "string (optional, 原始歌词路径)",
"calibrated_path": "string (optional, calibrated.json路径)",
"original_duration": "float (optional, 原曲时长秒)",
"task_id": "string (optional, auto-generated)"
}
}, ensure_ascii=False)