Skip to content

Commit 059eae4

Browse files
authored
Bugfix/model list unreachable (FlowiseAI#2522)
* fallback to fetch local models json file * enable user to specify local path to load models.json * Update pnpm-lock.yaml
1 parent d734747 commit 059eae4

File tree

2 files changed

+46
-15
lines changed

2 files changed

+46
-15
lines changed

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ Flowise support different environment variables to configure your instance. You
131131
| DEBUG | Print logs from components | Boolean | |
132132
| LOG_PATH | Location where log files are stored | String | `your-path/Flowise/logs` |
133133
| LOG_LEVEL | Different levels of logs | Enum String: `error`, `info`, `verbose`, `debug` | `info` |
134-
| LOG_JSON_SPACES | Spaces to beautify JSON logs | | 2
134+
| LOG_JSON_SPACES | Spaces to beautify JSON logs | | 2 |
135135
| APIKEY_PATH | Location where api keys are saved | String | `your-path/Flowise/packages/server` |
136136
| TOOL_FUNCTION_BUILTIN_DEP | NodeJS built-in modules to be used for Tool Function | String | |
137137
| TOOL_FUNCTION_EXTERNAL_DEP | External modules to be used for Tool Function | String | |

packages/components/src/modelLoader.ts

Lines changed: 45 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,27 +21,58 @@ const getModelsJSONPath = (): string => {
2121
return ''
2222
}
2323

24+
const isValidUrl = (urlString: string) => {
25+
let url
26+
try {
27+
url = new URL(urlString)
28+
} catch (e) {
29+
return false
30+
}
31+
return url.protocol === 'http:' || url.protocol === 'https:'
32+
}
33+
2434
const getModelConfig = async (category: MODEL_TYPE, name: string) => {
2535
const modelFile = process.env.MODEL_LIST_CONFIG_JSON || MASTER_MODEL_LIST
36+
2637
if (!modelFile) {
2738
throw new Error('MODEL_LIST_CONFIG_JSON not set')
2839
}
29-
try {
30-
const resp = await axios.get(modelFile)
31-
if (resp.status === 200 && resp.data) {
32-
const models = resp.data
33-
const categoryModels = models[category]
34-
return categoryModels.find((model: INodeOptionsValue) => model.name === name)
35-
} else {
36-
throw new Error('Error fetching model list')
40+
if (isValidUrl(modelFile)) {
41+
try {
42+
const resp = await axios.get(modelFile)
43+
if (resp.status === 200 && resp.data) {
44+
const models = resp.data
45+
const categoryModels = models[category]
46+
return categoryModels.find((model: INodeOptionsValue) => model.name === name)
47+
} else {
48+
throw new Error('Error fetching model list')
49+
}
50+
} catch (e) {
51+
const models = await fs.promises.readFile(getModelsJSONPath(), 'utf8')
52+
if (models) {
53+
const categoryModels = JSON.parse(models)[category]
54+
return categoryModels.find((model: INodeOptionsValue) => model.name === name)
55+
}
56+
return {}
3757
}
38-
} catch (e) {
39-
const models = await fs.promises.readFile(getModelsJSONPath(), 'utf8')
40-
if (models) {
41-
const categoryModels = JSON.parse(models)[category]
42-
return categoryModels.find((model: INodeOptionsValue) => model.name === name)
58+
} else {
59+
try {
60+
if (fs.existsSync(modelFile)) {
61+
const models = await fs.promises.readFile(modelFile, 'utf8')
62+
if (models) {
63+
const categoryModels = JSON.parse(models)[category]
64+
return categoryModels.find((model: INodeOptionsValue) => model.name === name)
65+
}
66+
}
67+
return {}
68+
} catch (e) {
69+
const models = await fs.promises.readFile(getModelsJSONPath(), 'utf8')
70+
if (models) {
71+
const categoryModels = JSON.parse(models)[category]
72+
return categoryModels.find((model: INodeOptionsValue) => model.name === name)
73+
}
74+
return {}
4375
}
44-
return {}
4576
}
4677
}
4778

0 commit comments

Comments
 (0)