Custom model names can include the @ symbol by itself.

To specify the model's provider, append it after the model name using `@` as before.

This format supports cases like `google vertex ai` with a model name like `claude-3-5-sonnet@20240620`.

For instance, `claude-3-5-sonnet@20240620@vertex-ai` will be split by `split(/@(?!.*@)/)` into:

`[ 'claude-3-5-sonnet@20240620', 'vertex-ai' ]`, where the former is the model name and the latter is the custom provider.
This commit is contained in:
ryanhex53
2024-11-05 07:44:12 +00:00
parent 14f751965f
commit b844045d23
5 changed files with 11 additions and 9 deletions

View File

@@ -79,10 +79,10 @@ export function collectModelTable(
);
} else {
// 1. find model by name, and set available value
const [customModelName, customProviderName] = name.split("@");
const [customModelName, customProviderName] = name.split(/@(?!.*@)/);
let count = 0;
for (const fullName in modelTable) {
const [modelName, providerName] = fullName.split("@");
const [modelName, providerName] = fullName.split(/@(?!.*@)/);
if (
customModelName == modelName &&
(customProviderName === undefined ||
@@ -102,7 +102,7 @@ export function collectModelTable(
}
// 2. if model not exists, create new model with available value
if (count === 0) {
let [customModelName, customProviderName] = name.split("@");
let [customModelName, customProviderName] = name.split(/@(?!.*@)/);
const provider = customProvider(
customProviderName || customModelName,
);
@@ -139,7 +139,7 @@ export function collectModelTableWithDefaultModel(
for (const key of Object.keys(modelTable)) {
if (
modelTable[key].available &&
key.split("@").shift() == defaultModel
key.split(/@(?!.*@)/).shift() == defaultModel
) {
modelTable[key].isDefault = true;
break;