mirror of
https://github.com/vibegif/vibegif.lol.git
synced 2026-04-07 02:12:12 +00:00
Fix: show detailed OpenRouter/Gemini errors
This commit is contained in:
61
index.html
61
index.html
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user