Pass through errors coming from FAL to the user
Signed| @@ -3555,6 +3555,7 @@ async function generateFalaiImage(prompt, negativePrompt, signal) { | ||
| 3555 | 3555 | return { format: 'jpg', data: data.image }; |
| 3556 | 3556 | } else { |
| 3557 | 3557 | const text = await result.text(); |
| 3558 | + console.log(text); | |
| 3558 | 3559 | throw new Error(text); |
| 3559 | 3560 | } |
| 3560 | 3561 | } |
| @@ -1251,6 +1251,7 @@ falai.post('/models', jsonParser, async (_request, response) => { | ||
| 1251 | 1251 | .filter(x => !x.title.toLowerCase().includes('inpainting') && |
| 1252 | 1252 | !x.title.toLowerCase().includes('control') && |
| 1253 | 1253 | !x.title.toLowerCase().includes('upscale')) |
| 1254 | + .sort((a, b) => a.title.localeCompare(b.title)) | |
| 1254 | 1255 | .map(x => ({ value: x.modelUrl.split('fal-ai/')[1], text: x.title })); |
| 1255 | 1256 | return response.send(models); |
| 1256 | 1257 | } catch (error) { |
| @@ -1328,6 +1329,11 @@ falai.post('/generate', jsonParser, async (request, response) => { | ||
| 1328 | 1329 | }, |
| 1329 | 1330 | }); |
| 1330 | 1331 | const resultData = await resultFetch.json(); |
| 1332 | + | |
| 1333 | + if (resultData.detail !== null && resultData.detail !== undefined) { | |
| 1334 | + throw new Error('FAL.AI failed to generate image.', { cause: `${resultData.detail[0].loc[1]}: ${resultData.detail[0].msg}` }); | |
| 1335 | + } | |
| 1336 | + | |
| 1331 | 1337 | const imageFetch = await fetch(resultData?.images[0].url, { |
| 1332 | 1338 | headers: { |
| 1333 | 1339 | 'Authorization': `Key ${key}`, |
| @@ -1343,7 +1349,7 @@ falai.post('/generate', jsonParser, async (request, response) => { | ||
| 1343 | 1349 | } |
| 1344 | 1350 | } catch (error) { |
| 1345 | 1351 | console.error(error); |
| 1346 | 1352 | return response.sendStatusstatus(500).send(error.cause || error.message); |
| 1347 | 1353 | } |
| 1348 | 1354 | }); |
| 1349 | 1355 | |