diff --git a/packages/i18n/src/locales/en/settings.yaml b/packages/i18n/src/locales/en/settings.yaml index bd6ea767b..1337bb80e 100644 --- a/packages/i18n/src/locales/en/settings.yaml +++ b/packages/i18n/src/locales/en/settings.yaml @@ -1422,6 +1422,11 @@ pages: title: Volcano Engine volcengine-coding-plan: description: Volcengine Coding Plan + models: + ark-code-latest: + description: Uses the model selected in the Coding Plan console, including Auto; changes apply in 3–5 minutes. + legacy: + description: Legacy Coding Plan model scheduled for retirement. Switch to a currently supported model. title: Volcengine Coding Plan byteplus: description: byteplus.com diff --git a/packages/stage-ui/src/libs/providers/providers/ark-providers.test.ts b/packages/stage-ui/src/libs/providers/providers/ark-providers.test.ts index ac1440505..d46527e40 100644 --- a/packages/stage-ui/src/libs/providers/providers/ark-providers.test.ts +++ b/packages/stage-ui/src/libs/providers/providers/ark-providers.test.ts @@ -38,7 +38,13 @@ describe('ark chat provider definitions', () => { const chatConfig = providerInstance.chat('volcengine-coding-plan/doubao-seed-2.1-turbo') expect(chatConfig.model).toBe('doubao-seed-2.1-turbo') - const listedModels = await provider!.extraMethods!.listModels!(parsedConfig, providerInstance) + const descriptions: Record = { + 'settings.pages.providers.provider.volcengine-coding-plan.models.ark-code-latest.description': 'Localized current model description.', + 'settings.pages.providers.provider.volcengine-coding-plan.models.legacy.description': 'Localized legacy model description.', + } + const listedModels = await provider!.extraMethods!.listModels!(parsedConfig, providerInstance, { + t: input => descriptions[input] ?? input, + }) expect(listedModels.map(model => model.id)).toEqual([ 'volcengine-coding-plan/ark-code-latest', 'volcengine-coding-plan/doubao-seed-2.1-turbo', @@ -53,7 +59,7 @@ describe('ark chat provider definitions', () => { ]) expect(listedModels[0]).toEqual({ - description: 'Uses the model selected in the Coding Plan console, including Auto; changes apply in 3–5 minutes.', + description: 'Localized current model description.', id: 'volcengine-coding-plan/ark-code-latest', name: 'ark-code-latest', provider: 'volcengine-coding-plan', @@ -62,7 +68,7 @@ describe('ark chat provider definitions', () => { { contextLength: 256000, deprecated: true, - description: 'Legacy Coding Plan model scheduled for retirement. Switch to a currently supported model.', + description: 'Localized legacy model description.', id: 'volcengine-coding-plan/doubao-seed-2.0-code', name: 'doubao-seed-2.0-code', provider: 'volcengine-coding-plan', @@ -70,7 +76,7 @@ describe('ark chat provider definitions', () => { { contextLength: 256000, deprecated: true, - description: 'Legacy Coding Plan model scheduled for retirement. Switch to a currently supported model.', + description: 'Localized legacy model description.', id: 'volcengine-coding-plan/doubao-seed-2.0-pro', name: 'doubao-seed-2.0-pro', provider: 'volcengine-coding-plan', diff --git a/packages/stage-ui/src/libs/providers/providers/ark-shared.ts b/packages/stage-ui/src/libs/providers/providers/ark-shared.ts index 238835e1a..3410a895b 100644 --- a/packages/stage-ui/src/libs/providers/providers/ark-shared.ts +++ b/packages/stage-ui/src/libs/providers/providers/ark-shared.ts @@ -18,7 +18,7 @@ interface ArkModelSpec { id: string contextLength?: number deprecated?: boolean - description?: string + descriptionKey?: string } interface ArkProviderDefinitionOptions { @@ -93,7 +93,7 @@ export function createArkChatProviderDefinition(options: ArkProviderDefinitionOp }, extraMethods: { - listModels: async () => models.map((model) => { + listModels: async (_config, _provider, contextOptions) => models.map((model) => { const modelInfo: ModelInfo = { id: `${modelPrefix}${model.id}`, name: model.id, @@ -105,8 +105,8 @@ export function createArkChatProviderDefinition(options: ArkProviderDefinitionOp if (model.deprecated !== undefined) { modelInfo.deprecated = model.deprecated } - if (model.description !== undefined) { - modelInfo.description = model.description + if (model.descriptionKey !== undefined && contextOptions) { + modelInfo.description = contextOptions.t(model.descriptionKey) } return modelInfo }), diff --git a/packages/stage-ui/src/libs/providers/providers/volcengine-coding-plan/index.ts b/packages/stage-ui/src/libs/providers/providers/volcengine-coding-plan/index.ts index cacaf7ac0..fb521a02d 100644 --- a/packages/stage-ui/src/libs/providers/providers/volcengine-coding-plan/index.ts +++ b/packages/stage-ui/src/libs/providers/providers/volcengine-coding-plan/index.ts @@ -14,7 +14,7 @@ export const providerVolcengineCodingPlan = createArkChatProviderDefinition({ models: [ { id: 'ark-code-latest', - description: 'Uses the model selected in the Coding Plan console, including Auto; changes apply in 3–5 minutes.', + descriptionKey: 'settings.pages.providers.provider.volcengine-coding-plan.models.ark-code-latest.description', }, { id: 'doubao-seed-2.1-turbo', contextLength: 256000 }, { id: 'doubao-seed-2.0-lite', contextLength: 256000 }, @@ -27,13 +27,13 @@ export const providerVolcengineCodingPlan = createArkChatProviderDefinition({ id: 'doubao-seed-2.0-code', contextLength: 256000, deprecated: true, - description: 'Legacy Coding Plan model scheduled for retirement. Switch to a currently supported model.', + descriptionKey: 'settings.pages.providers.provider.volcengine-coding-plan.models.legacy.description', }, { id: 'doubao-seed-2.0-pro', contextLength: 256000, deprecated: true, - description: 'Legacy Coding Plan model scheduled for retirement. Switch to a currently supported model.', + descriptionKey: 'settings.pages.providers.provider.volcengine-coding-plan.models.legacy.description', }, ], }) diff --git a/packages/stage-ui/src/libs/providers/types.ts b/packages/stage-ui/src/libs/providers/types.ts index 4316d2b2c..3bab60adf 100644 --- a/packages/stage-ui/src/libs/providers/types.ts +++ b/packages/stage-ui/src/libs/providers/types.ts @@ -61,7 +61,7 @@ export interface ProviderOnboardingField { } export interface ProviderExtraMethods { - listModels?: (config: TConfig, provider: ProviderInstance) => Promise + listModels?: (config: TConfig, provider: ProviderInstance, contextOptions?: { t: (input: string) => string }) => Promise /** * Returns the voice catalogue. `model` lets providers whose voices vary by * model variant (Volcengine streaming TTS 1.0 vs 2.0 differ in catalogue) diff --git a/packages/stage-ui/src/stores/providers/provider.ts b/packages/stage-ui/src/stores/providers/provider.ts index 0cc797c4f..3284f4309 100644 --- a/packages/stage-ui/src/stores/providers/provider.ts +++ b/packages/stage-ui/src/stores/providers/provider.ts @@ -495,7 +495,7 @@ export const useProviderStore = defineStore('provider', () => { const provider = await definition.createProvider(config) try { if (definition.extraMethods?.listModels) { - const models = await definition.extraMethods.listModels(config, provider) + const models = await definition.extraMethods.listModels(config, provider, { t }) return normalizeProviderModels(providerId, models) }