Fix: show detailed OpenRouter/Gemini errors

This commit is contained in:
2026-03-20 22:42:28 -07:00
parent be7307de94
commit d9a7f2ef52

View File

@@ -213,6 +213,60 @@
};
}
function safeJsonStringify(v) {
try { return JSON.stringify(v); } catch (_) { return String(v); }
}
function extractApiErrorDetails(payload) {
if (!payload) return '';
var err = payload.error || payload;
var parts = [];
if (typeof err === 'string') parts.push(err);
if (err && typeof err.message === 'string') parts.push(err.message);
if (err && typeof err.code === 'string') parts.push('code: ' + err.code);
if (err && typeof err.type === 'string') parts.push('type: ' + err.type);
if (err && err.metadata) {
var md = err.metadata;
if (md.provider_name) parts.push('provider: ' + md.provider_name);
if (md.raw && typeof md.raw === 'string') parts.push(md.raw);
if (md.reason) parts.push(md.reason);
}
if (err && err.details) {
if (typeof err.details === 'string') parts.push(err.details);
else parts.push(safeJsonStringify(err.details));
}
if (!parts.length) return '';
var seen = {};
var deduped = [];
for (var i = 0; i < parts.length; i++) {
var p = (parts[i] || '').trim();
if (!p || seen[p]) continue;
seen[p] = true;
deduped.push(p);
}
return deduped.join(' | ');
}
function parseErrorResponse(res) {
return res.text().then(function(raw) {
var json = null;
if (raw) {
try { json = JSON.parse(raw); } catch (_) {}
}
var detail = extractApiErrorDetails(json);
if (!detail && raw) detail = raw.trim();
if (!detail) detail = 'Unknown API error';
var statusPart = 'HTTP ' + res.status + (res.statusText ? ' ' + res.statusText : '');
return statusPart + ' — ' + detail;
});
}
function generateFrame(opts) {
var model = opts.model;
var messages = opts.messages;
@@ -246,9 +300,7 @@
})
.then(function(res) {
if (!res.ok) {
return res.json().catch(function() { return {}; }).then(function(e) {
throw new Error((e && e.error && e.error.message) || 'API error ' + res.status);
});
return parseErrorResponse(res).then(function(msg) { throw new Error(msg); });
}
return res.json();
})
@@ -408,7 +460,8 @@
setProgress(100, 'done! 🎉');
})
.catch(function(err) {
setProgress(0, 'error: ' + err.message);
var msg = (err && err.message) ? err.message : String(err);
setProgress(0, 'error: ' + msg);
console.error('vibegif error:', err);
})
.then(function() {