chore(api,web): include validation message and detail in /api/generate error response
Browse files- server/main.py +17 -1
- web/src/lib/api.ts +3 -1
server/main.py
CHANGED
|
@@ -123,9 +123,25 @@ def build_app() -> FastAPI:
|
|
| 123 |
try:
|
| 124 |
validate_reference_clip(data)
|
| 125 |
except AudioValidationError as exc:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 126 |
return JSONResponse(
|
| 127 |
status_code=400,
|
| 128 |
-
content={
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 129 |
)
|
| 130 |
tmp = tempfile.NamedTemporaryFile(delete=False, suffix=".wav")
|
| 131 |
tmp.write(data)
|
|
|
|
| 123 |
try:
|
| 124 |
validate_reference_clip(data)
|
| 125 |
except AudioValidationError as exc:
|
| 126 |
+
detail = {
|
| 127 |
+
"size_bytes": len(data),
|
| 128 |
+
"first_4": data[:4].decode("latin-1", errors="replace"),
|
| 129 |
+
"filename": reference_wav.filename,
|
| 130 |
+
"content_type": reference_wav.content_type,
|
| 131 |
+
}
|
| 132 |
+
print(
|
| 133 |
+
f"[reference_invalid] {exc} | {detail}",
|
| 134 |
+
flush=True,
|
| 135 |
+
)
|
| 136 |
return JSONResponse(
|
| 137 |
status_code=400,
|
| 138 |
+
content={
|
| 139 |
+
"error": {
|
| 140 |
+
"code": "reference_invalid",
|
| 141 |
+
"message": str(exc),
|
| 142 |
+
"detail": detail,
|
| 143 |
+
}
|
| 144 |
+
},
|
| 145 |
)
|
| 146 |
tmp = tempfile.NamedTemporaryFile(delete=False, suffix=".wav")
|
| 147 |
tmp.write(data)
|
web/src/lib/api.ts
CHANGED
|
@@ -66,7 +66,9 @@ export async function generate(input: GenerateInput): Promise<Blob> {
|
|
| 66 |
const r = await fetch("/api/generate", { method: "POST", body: fd });
|
| 67 |
if (!r.ok) {
|
| 68 |
const err = await r.json().catch(() => ({}));
|
| 69 |
-
|
|
|
|
|
|
|
| 70 |
}
|
| 71 |
return r.blob();
|
| 72 |
}
|
|
|
|
| 66 |
const r = await fetch("/api/generate", { method: "POST", body: fd });
|
| 67 |
if (!r.ok) {
|
| 68 |
const err = await r.json().catch(() => ({}));
|
| 69 |
+
const code = err?.error?.code ?? `generate: ${r.status}`;
|
| 70 |
+
const msg = err?.error?.message;
|
| 71 |
+
throw new Error(msg ? `${code}: ${msg}` : code);
|
| 72 |
}
|
| 73 |
return r.blob();
|
| 74 |
}
|