| 1167 | throw new Error('FAL.AI request failed.'); | 1173 | throw new Error('FAL.AI request failed.'); |
| 1168 | } | 1174 | } |
| 1169 | | 1175 | |
| 1170 | const data = await result.json(); | | |
| 1171 | | 1176 | |
| 1172 | if (!Array.isArray(data)) { | 1177 | modelsResponse = await result.json(); |
| | 1178 | if (!('items' in modelsResponse) || !Array.isArray(modelsResponse.items)) { |
| 1173 | console.warn('FAL.AI returned invalid data.'); | 1179 | console.warn('FAL.AI returned invalid data.'); |
| 1174 | throw new Error('FAL.AI request failed.'); | 1180 | throw new Error('FAL.AI request failed.'); |
| 1175 | } | 1181 | } |
| 1176 | | 1182 | |
| 1177 | const models = data | 1183 | models = models.concat( |
| 1178 | .filter(x => !x.title.toLowerCase().includes('inpainting') && | 1184 | modelsResponse.items.filter( |
| | 1185 | x => ( |
| | 1186 | !x.title.toLowerCase().includes('inpainting') && |
| 1179 | !x.title.toLowerCase().includes('control') && | 1187 | !x.title.toLowerCase().includes('control') && |
| 1180 | !x.title.toLowerCase().includes('upscale') && | 1188 | !x.title.toLowerCase().includes('upscale') && |
| 1181 | !x.title.toLowerCase().includes('lora')) | 1189 | !x.title.toLowerCase().includes('lora') |
| | 1190 | ), |
| | 1191 | ), |
| | 1192 | ); |
| | 1193 | |
| | 1194 | page = modelsResponse.page + 1; |
| | 1195 | } while (modelsResponse != null && page < modelsResponse.pages); |
| | 1196 | |
| | 1197 | const modelOptions = models |
| 1182 | .sort((a, b) => a.title.localeCompare(b.title)) | 1198 | .sort((a, b) => a.title.localeCompare(b.title)) |
| 1183 | .map(x => ({ value: x.modelUrl.split('fal-ai/')[1], text: x.title })); | 1199 | .map(x => ({ value: x.modelUrl.split('fal-ai/')[1], text: x.title })); |
| 1184 | return response.send(models); | 1200 | return response.send(modelOptions); |
| 1185 | } catch (error) { | 1201 | } catch (error) { |
| 1186 | console.error(error); | 1202 | console.error(error); |
| 1187 | return response.sendStatus(500); | 1203 | return response.sendStatus(500); |