@@ -21,27 +21,58 @@ const getModelsJSONPath = (): string => {
21
21
return ''
22
22
}
23
23
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
+
24
34
const getModelConfig = async ( category : MODEL_TYPE , name : string ) => {
25
35
const modelFile = process . env . MODEL_LIST_CONFIG_JSON || MASTER_MODEL_LIST
36
+
26
37
if ( ! modelFile ) {
27
38
throw new Error ( 'MODEL_LIST_CONFIG_JSON not set' )
28
39
}
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 { }
37
57
}
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 { }
43
75
}
44
- return { }
45
76
}
46
77
}
47
78
0 commit comments