@@ -37,6 +37,17 @@ const sortModelTable = (models: ReturnType<typeof collectModels>) =>
37
37
}
38
38
} ) ;
39
39
40
+ /**
41
+ * get model name and provider from a formatted string,
42
+ * e.g. `gpt-4@OpenAi` or `claude-3-5-sonnet@20240620@Google`
43
+ * @param modelWithProvider model name with provider separated by last `@` char,
44
+ * @returns [model, provider] tuple, if no `@` char found, provider is undefined
45
+ */
46
+ export function getModelProvider ( modelWithProvider : string ) : [ string , string ?] {
47
+ const [ model , provider ] = modelWithProvider . split ( / @ (? ! .* @ ) / ) ;
48
+ return [ model , provider ] ;
49
+ }
50
+
40
51
export function collectModelTable (
41
52
models : readonly LLMModel [ ] ,
42
53
customModels : string ,
@@ -79,10 +90,10 @@ export function collectModelTable(
79
90
) ;
80
91
} else {
81
92
// 1. find model by name, and set available value
82
- const [ customModelName , customProviderName ] = name . split ( "@" ) ;
93
+ const [ customModelName , customProviderName ] = getModelProvider ( name ) ;
83
94
let count = 0 ;
84
95
for ( const fullName in modelTable ) {
85
- const [ modelName , providerName ] = fullName . split ( "@" ) ;
96
+ const [ modelName , providerName ] = getModelProvider ( fullName ) ;
86
97
if (
87
98
customModelName == modelName &&
88
99
( customProviderName === undefined ||
@@ -102,7 +113,7 @@ export function collectModelTable(
102
113
}
103
114
// 2. if model not exists, create new model with available value
104
115
if ( count === 0 ) {
105
- let [ customModelName , customProviderName ] = name . split ( "@" ) ;
116
+ let [ customModelName , customProviderName ] = getModelProvider ( name ) ;
106
117
const provider = customProvider (
107
118
customProviderName || customModelName ,
108
119
) ;
@@ -139,7 +150,7 @@ export function collectModelTableWithDefaultModel(
139
150
for ( const key of Object . keys ( modelTable ) ) {
140
151
if (
141
152
modelTable [ key ] . available &&
142
- key . split ( "@" ) . shift ( ) == defaultModel
153
+ getModelProvider ( key ) [ 0 ] == defaultModel
143
154
) {
144
155
modelTable [ key ] . isDefault = true ;
145
156
break ;
0 commit comments