Skip to content

Commit aef19f4

Browse files
authored
💄 style: use default deployment name when parseModelString doesn't contain deployment name (lobehub#7719)
* ♻️ refactor: use default deployment name when parseModelString doesn't contain deployment name * ✅ test: add test case for parseModelString without deployment name * 添加测试用例 * 📝 docs: clarify default deployment name behavior in model list documentation * 📝 docs: update deployment name description for clarity in model list documentation * 📝 docs: update deployment name description for clarity in model list documentation
1 parent 58d356c commit aef19f4

File tree

6 files changed

+71
-11
lines changed

6 files changed

+71
-11
lines changed

docs/self-hosting/advanced/model-list.mdx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ You can use `+` to add a model, `-` to hide a model, and use `model name->deploy
1919
```text
2020
id->deploymentName=displayName<maxToken:vision:reasoning:search:fc:file:imageOutput>,model2,model3
2121
```
22+
The deploymentName `->deploymentName` can be omitted, and it defaults to the latest model version. Currently, the model service providers that support `->deploymentName` are: Azure and Volcengine.
2223

2324
For example: `+qwen-7b-chat,+glm-6b,-gpt-3.5-turbo,gpt-4-0125-preview=gpt-4-turbo`
2425

docs/self-hosting/advanced/model-list.zh-CN.mdx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ LobeChat 支持在部署时自定义模型列表,详情请参考 [模型提供
1818
```text
1919
id->deploymentName=displayName<maxToken:vision:reasoning:search:fc:file:imageOutput>,model2,model3
2020
```
21+
部署名`->deploymentName`可以省略,默认为最新版本的模型。当前支持`->deploymentName`的模型服务商有:Azure和Volcengine。
2122

2223
例如: `+qwen-7b-chat,+glm-6b,-gpt-3.5-turbo,gpt-4-0125-preview=gpt-4-turbo`
2324

docs/self-hosting/environment-variables/model-provider.mdx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -599,9 +599,9 @@ If you need to use Azure OpenAI to provide model services, you can refer to the
599599
### `VOLCENGINE_MODEL_LIST`
600600

601601
- Type: Optional
602-
- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `model_name->deploymentName=display_name` to customize the display name of a model, separated by commas. Definition syntax rules see [model-list][model-list]
602+
- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `model_name->deploymentName=display_name` to customize the display name of a model, separated by commas. The deploymentName `->deploymentName` can be omitted, and it defaults to the latest model version. Definition syntax rules see [model-list][model-list]
603603
- Default: `-`
604-
- Example: `-all,+deepseek-r1->deepseek-r1-250120,+deepseek-v3->deepseek-v3-250324,+doubao-1.5-pro-256k->doubao-1-5-pro-256k-250115,+doubao-1.5-pro-32k->doubao-1-5-pro-32k-250115,+doubao-1.5-lite-32k->doubao-1-5-lite-32k-250115`
604+
- Example: `-all,+deepseek-r1,+deepseek-v3->deepseek-v3-250324,+doubao-1.5-pro-256k,+doubao-1.5-pro-32k->doubao-1-5-pro-32k-250115,+doubao-1.5-lite-32k`
605605

606606
### `VOLCENGINE_PROXY_URL`
607607

@@ -622,7 +622,7 @@ If you need to use Azure OpenAI to provide model services, you can refer to the
622622
### `INFINIAI_MODEL_LIST`
623623

624624
- Type: Optional
625-
- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `model_name->deploymentName=display_name` to customize the display name of a model, separated by commas. Definition syntax rules see [model-list][model-list]
625+
- Description: Used to control the model list, use `+` to add a model, use `-` to hide a model, use `model_name=display_name` to customize the display name of a model, separated by commas. Definition syntax rules see [model-list][model-list]
626626
- Default: `-`
627627
- Example: `-all,+qwq-32b,+deepseek-r1`
628628

docs/self-hosting/environment-variables/model-provider.zh-CN.mdx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -597,9 +597,9 @@ LobeChat 在部署时提供了丰富的模型服务商相关的环境变量,
597597
### `VOLCENGINE_MODEL_LIST`
598598

599599
- 类型:可选
600-
- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名->部署名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则见 [模型列表][model-list]
600+
- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名->部署名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。部署名`->部署名`可以省略,默认为最新版本的模型。模型定义语法规则见 [模型列表][model-list]
601601
- 默认值:`-`
602-
- 示例:`-all,+deepseek-r1->deepseek-r1-250120,+deepseek-v3->deepseek-v3-250324,+doubao-1.5-pro-256k->doubao-1-5-pro-256k-250115,+doubao-1.5-pro-32k->doubao-1-5-pro-32k-250115,+doubao-1.5-lite-32k->doubao-1-5-lite-32k-250115`
602+
- 示例:`-all,+deepseek-r1,+deepseek-v3->deepseek-v3-250324,+doubao-1.5-pro-256k,+doubao-1.5-pro-32k->doubao-1-5-pro-32k-250115,+doubao-1.5-lite-32k`
603603

604604
### `VOLCENGINE_PROXY_URL`
605605

@@ -620,7 +620,7 @@ LobeChat 在部署时提供了丰富的模型服务商相关的环境变量,
620620
### `INFINIAI_MODEL_LIST`
621621

622622
- 类型:可选
623-
- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名->部署名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则见 [模型列表][model-list]
623+
- 描述:用来控制模型列表,使用 `+` 增加一个模型,使用 `-` 来隐藏一个模型,使用 `模型名=展示名<扩展配置>` 来自定义模型的展示名,用英文逗号隔开。模型定义语法规则见 [模型列表][model-list]
624624
- 默认值:`-`
625625
- 示例:`-all,+qwq-32b,+deepseek-r1`
626626

src/utils/parseModels.test.ts

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -306,16 +306,13 @@ describe('parseModelString', () => {
306306
});
307307

308308
describe('deployment name', () => {
309-
it('should have same deployment name as id', () => {
309+
it('should have no deployment name', () => {
310310
const result = parseModelString('model1=Model 1', true);
311311
expect(result.add[0]).toEqual({
312312
id: 'model1',
313313
displayName: 'Model 1',
314314
abilities: {},
315315
type: 'chat',
316-
config: {
317-
deploymentName: 'model1',
318-
},
319316
});
320317
});
321318

@@ -455,6 +452,61 @@ describe('transformToChatModelCards', () => {
455452
expect(result).toMatchSnapshot();
456453
});
457454

455+
it('should use default deploymentName from known model when not specified in string (VolcEngine case)', () => {
456+
const knownModel = LOBE_DEFAULT_MODEL_LIST.find(
457+
(m) => m.id === 'deepseek-r1' && m.providerId === 'volcengine',
458+
);
459+
const defaultChatModels: AiFullModelCard[] = [];
460+
const result = transformToAiChatModelList({
461+
modelString: '+deepseek-r1',
462+
defaultChatModels,
463+
providerId: 'volcengine',
464+
withDeploymentName: true,
465+
});
466+
expect(result).toContainEqual({
467+
...knownModel,
468+
enabled: true,
469+
});
470+
});
471+
472+
it('should use deploymentName from modelString when specified (VolcEngine case)', () => {
473+
const defaultChatModels: AiFullModelCard[] = [];
474+
const knownModel = LOBE_DEFAULT_MODEL_LIST.find(
475+
(m) => m.id === 'deepseek-r1' && m.providerId === 'volcengine',
476+
);
477+
const result = transformToAiChatModelList({
478+
modelString: `+deepseek-r1->my-custom-deploy`,
479+
defaultChatModels,
480+
providerId: 'volcengine',
481+
withDeploymentName: true,
482+
});
483+
expect(result).toContainEqual({
484+
...knownModel,
485+
enabled: true,
486+
config: { deploymentName: 'my-custom-deploy' },
487+
});
488+
});
489+
490+
it('should set both id and deploymentName to the full string when no -> is used and withDeploymentName is true', () => {
491+
const defaultChatModels: AiFullModelCard[] = [];
492+
const result = transformToAiChatModelList({
493+
modelString: `+my_model`,
494+
defaultChatModels,
495+
providerId: 'volcengine',
496+
withDeploymentName: true,
497+
});
498+
expect(result).toContainEqual({
499+
id: `my_model`,
500+
displayName: `my_model`,
501+
type: 'chat',
502+
abilities: {},
503+
enabled: true,
504+
config: {
505+
deploymentName: `my_model`,
506+
},
507+
});
508+
});
509+
458510
it('should handle azure real case', () => {
459511
const defaultChatModels = [
460512
{

src/utils/parseModels.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export const parseModelString = (modelString: string = '', withDeploymentName =
2323

2424
if (withDeploymentName) {
2525
[id, deploymentName] = id.split('->');
26-
if (!deploymentName) deploymentName = id;
26+
// if (!deploymentName) deploymentName = id;
2727
}
2828

2929
if (disable) {
@@ -141,6 +141,12 @@ export const transformToAiChatModelList = ({
141141
knownModel = LOBE_DEFAULT_MODEL_LIST.find((model) => model.id === toAddModel.id);
142142
if (knownModel) knownModel.providerId = providerId;
143143
}
144+
if (withDeploymentName) {
145+
toAddModel.config = toAddModel.config || {};
146+
if (!toAddModel.config.deploymentName) {
147+
toAddModel.config.deploymentName = knownModel?.config?.deploymentName ?? toAddModel.id;
148+
}
149+
}
144150

145151
// if the model is known, update it based on the known model
146152
if (knownModel) {

0 commit comments

Comments
 (0)