diff --git a/packages/types/src/model.ts b/packages/types/src/model.ts index 244812b29c..e979f654df 100644 --- a/packages/types/src/model.ts +++ b/packages/types/src/model.ts @@ -76,6 +76,8 @@ export const modelInfoSchema = z.object({ minTokensPerCachePoint: z.number().optional(), maxCachePoints: z.number().optional(), cachableFields: z.array(z.string()).optional(), + // Flag to indicate if the model is deprecated and should not be used + deprecated: z.boolean().optional(), /** * Service tiers with pricing information. * Each tier can have a name (for OpenAI service tiers) and pricing overrides. diff --git a/packages/types/src/providers/roo.ts b/packages/types/src/providers/roo.ts index 63650ac9a1..fd705b1eb9 100644 --- a/packages/types/src/providers/roo.ts +++ b/packages/types/src/providers/roo.ts @@ -38,6 +38,7 @@ export const rooModels = { outputPrice: 0, description: "Grok 4 Fast is xAI's latest multimodal model with SOTA cost-efficiency and a 2M token context window. (Note: prompts and completions are logged by xAI and used to improve the model.)", + deprecated: true, }, "deepseek/deepseek-chat-v3.1": { maxTokens: 16_384, diff --git a/webview-ui/src/components/settings/ApiOptions.tsx b/webview-ui/src/components/settings/ApiOptions.tsx index 1aa109d9de..4142796b66 100644 --- a/webview-ui/src/components/settings/ApiOptions.tsx +++ b/webview-ui/src/components/settings/ApiOptions.tsx @@ -263,15 +263,24 @@ const ApiOptions = ({ const filteredModels = filterModels(models, selectedProvider, organizationAllowList) - const modelOptions = filteredModels - ? Object.keys(filteredModels).map((modelId) => ({ - value: modelId, - label: modelId, - })) + // Include the currently selected model even if deprecated (so users can see what they have selected) + // But filter out other deprecated models from being newly selectable + const availableModels = filteredModels + ? Object.entries(filteredModels) + .filter(([modelId, modelInfo]) => { + // Always include the currently selected model + if (modelId === selectedModelId) return true + // Filter out deprecated models that aren't currently selected + return !modelInfo.deprecated + }) + .map(([modelId]) => ({ + value: modelId, + label: modelId, + })) : [] - return modelOptions - }, [selectedProvider, organizationAllowList]) + return availableModels + }, [selectedProvider, organizationAllowList, selectedModelId]) const onProviderChange = useCallback( (value: ProviderName) => { @@ -716,6 +725,11 @@ const ApiOptions = ({ + {/* Show error if a deprecated model is selected */} + {selectedModelInfo?.deprecated && ( + + )} + {selectedProvider === "bedrock" && selectedModelId === "custom-arn" && ( )} - + {/* Only show model info if not deprecated */} + {!selectedModelInfo?.deprecated && ( + + )} )} diff --git a/webview-ui/src/components/settings/ModelPicker.tsx b/webview-ui/src/components/settings/ModelPicker.tsx index 74e3d31f00..b581304744 100644 --- a/webview-ui/src/components/settings/ModelPicker.tsx +++ b/webview-ui/src/components/settings/ModelPicker.tsx @@ -75,13 +75,30 @@ export const ModelPicker = ({ const selectTimeoutRef = useRef(null) const closeTimeoutRef = useRef(null) + const { id: selectedModelId, info: selectedModelInfo } = useSelectedModel(apiConfiguration) + const modelIds = useMemo(() => { const filteredModels = filterModels(models, apiConfiguration.apiProvider, organizationAllowList) - return Object.keys(filteredModels ?? {}).sort((a, b) => a.localeCompare(b)) - }, [models, apiConfiguration.apiProvider, organizationAllowList]) + // Include the currently selected model even if deprecated (so users can see what they have selected) + // But filter out other deprecated models from being newly selectable + const availableModels = Object.entries(filteredModels ?? {}) + .filter(([modelId, modelInfo]) => { + // Always include the currently selected model + if (modelId === selectedModelId) return true + // Filter out deprecated models that aren't currently selected + return !modelInfo.deprecated + }) + .reduce( + (acc, [modelId, modelInfo]) => { + acc[modelId] = modelInfo + return acc + }, + {} as Record, + ) - const { id: selectedModelId, info: selectedModelInfo } = useSelectedModel(apiConfiguration) + return Object.keys(availableModels).sort((a, b) => a.localeCompare(b)) + }, [models, apiConfiguration.apiProvider, organizationAllowList, selectedModelId]) const [searchValue, setSearchValue] = useState("") @@ -225,7 +242,10 @@ export const ModelPicker = ({ {errorMessage && } - {selectedModelId && selectedModelInfo && ( + {selectedModelInfo?.deprecated && ( + + )} + {selectedModelId && selectedModelInfo && !selectedModelInfo.deprecated && ( ({ + useAppTranslation: () => ({ + t: (key: string, options?: any) => { + // Handle specific translation keys + if (key === "settings:validation.modelDeprecated") { + return "This model is no longer available. Please select a different model." + } + if (options) return `${key} ${JSON.stringify(options)}` + return key + }, + }), +})) + +// Mock the useSelectedModel hook +vi.mock("@/components/ui/hooks/useSelectedModel", () => ({ + useSelectedModel: (apiConfiguration: any) => { + const modelId = apiConfiguration?.openRouterModelId || "model-1" + const models: Record = { + "model-1": { + maxTokens: 1000, + contextWindow: 4000, + supportsPromptCache: true, + }, + "model-2": { + maxTokens: 2000, + contextWindow: 8000, + supportsPromptCache: false, + }, + "deprecated-model": { + maxTokens: 1500, + contextWindow: 6000, + supportsPromptCache: true, + deprecated: true, + }, + } + return { + id: modelId, + info: models[modelId], + provider: "openrouter", + isLoading: false, + isError: false, + } + }, +})) + +describe("ModelPicker - Deprecated Models", () => { + const mockSetApiConfigurationField = vi.fn() + const queryClient = new QueryClient({ + defaultOptions: { + queries: { retry: false }, + }, + }) + + const regularModels: Record = { + "model-1": { + maxTokens: 1000, + contextWindow: 4000, + supportsPromptCache: true, + }, + "model-2": { + maxTokens: 2000, + contextWindow: 8000, + supportsPromptCache: false, + }, + "deprecated-model": { + maxTokens: 1500, + contextWindow: 6000, + supportsPromptCache: true, + deprecated: true, + }, + } + + beforeEach(() => { + vi.clearAllMocks() + }) + + it("should filter out deprecated models from the dropdown", async () => { + const user = userEvent.setup() + + render( + + + , + ) + + // Open the dropdown + const button = screen.getByTestId("model-picker-button") + await user.click(button) + + // Check that non-deprecated models are shown + expect(screen.getByTestId("model-option-model-1")).toBeInTheDocument() + expect(screen.getByTestId("model-option-model-2")).toBeInTheDocument() + + // Check that deprecated model is NOT shown + expect(screen.queryByTestId("model-option-deprecated-model")).not.toBeInTheDocument() + }) + + it("should show error when a deprecated model is currently selected", () => { + render( + + + , + ) + + // Check that the error message is displayed + expect( + screen.getByText("This model is no longer available. Please select a different model."), + ).toBeInTheDocument() + }) + + it("should allow selecting non-deprecated models", async () => { + const user = userEvent.setup() + + render( + + + , + ) + + // Open the dropdown + const button = screen.getByTestId("model-picker-button") + await user.click(button) + + // Select a non-deprecated model + const model2Option = screen.getByTestId("model-option-model-2") + await user.click(model2Option) + + // Verify the selection was made + expect(mockSetApiConfigurationField).toHaveBeenCalledWith("openRouterModelId", "model-2") + }) + + it("should not display model info for deprecated models", () => { + render( + + + , + ) + + // Model info should not be displayed for deprecated models + expect(screen.queryByText("This is a deprecated model")).not.toBeInTheDocument() + }) +}) diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index 2aa6b7ad72..611159069b 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -824,6 +824,7 @@ "regionMismatch": "Avís: La regió del vostre ARN ({{arnRegion}}) no coincideix amb la regió seleccionada ({{region}}). Això pot causar problemes d'accés. El proveïdor utilitzarà la regió de l'ARN." }, "modelAvailability": "L'ID de model ({{modelId}}) que heu proporcionat no està disponible. Si us plau, trieu un altre model.", + "modelDeprecated": "Aquest model ja no està disponible. Si us plau, seleccioneu un model diferent.", "providerNotAllowed": "El proveïdor '{{provider}}' no està permès per la vostra organització", "modelNotAllowed": "El model '{{model}}' no està permès per al proveïdor '{{provider}}' per la vostra organització", "profileInvalid": "Aquest perfil conté un proveïdor o model que no està permès per la vostra organització", diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index a96e215185..00827751b0 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -824,6 +824,7 @@ "regionMismatch": "Warnung: Die Region in deiner ARN ({{arnRegion}}) stimmt nicht mit deiner ausgewählten Region ({{region}}) überein. Dies kann zu Zugriffsproblemen führen. Der Anbieter wird die Region aus der ARN verwenden." }, "modelAvailability": "Die von dir angegebene Modell-ID ({{modelId}}) ist nicht verfügbar. Bitte wähle ein anderes Modell.", + "modelDeprecated": "Dieses Modell ist nicht mehr verfügbar. Bitte wähle ein anderes Modell.", "providerNotAllowed": "Anbieter '{{provider}}' ist von deiner Organisation nicht erlaubt", "modelNotAllowed": "Modell '{{model}}' ist für Anbieter '{{provider}}' von deiner Organisation nicht erlaubt", "profileInvalid": "Dieses Profil enthält einen Anbieter oder ein Modell, das von deiner Organisation nicht erlaubt ist", diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index aa3199e8e8..dfccc49cc4 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -829,6 +829,7 @@ "regionMismatch": "Warning: The region in your ARN ({{arnRegion}}) does not match your selected region ({{region}}). This may cause access issues. The provider will use the region from the ARN." }, "modelAvailability": "The model ID ({{modelId}}) you provided is not available. Please choose a different model.", + "modelDeprecated": "This model is no longer available. Please select a different model.", "providerNotAllowed": "Provider '{{provider}}' is not allowed by your organization", "modelNotAllowed": "Model '{{model}}' is not allowed for provider '{{provider}}' by your organization", "profileInvalid": "This profile contains a provider or model that is not allowed by your organization", diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index 44c1b9496d..c1271df827 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -824,6 +824,7 @@ "regionMismatch": "Advertencia: La región en su ARN ({{arnRegion}}) no coincide con su región seleccionada ({{region}}). Esto puede causar problemas de acceso. El proveedor usará la región del ARN." }, "modelAvailability": "El ID de modelo ({{modelId}}) que proporcionó no está disponible. Por favor, elija un modelo diferente.", + "modelDeprecated": "Este modelo ya no está disponible. Por favor, elija un modelo diferente.", "providerNotAllowed": "El proveedor '{{provider}}' no está permitido por su organización", "modelNotAllowed": "El modelo '{{model}}' no está permitido para el proveedor '{{provider}}' por su organización", "profileInvalid": "Este perfil contiene un proveedor o modelo que no está permitido por su organización", diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index cd2b3bef87..abcf401d64 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -824,6 +824,7 @@ "regionMismatch": "Attention : La région dans votre ARN ({{arnRegion}}) ne correspond pas à votre région sélectionnée ({{region}}). Cela peut causer des problèmes d'accès. Le fournisseur utilisera la région de l'ARN." }, "modelAvailability": "L'ID de modèle ({{modelId}}) que vous avez fourni n'est pas disponible. Veuillez choisir un modèle différent.", + "modelDeprecated": "Ce modèle n'est plus disponible. Veuillez sélectionner un modèle différent.", "providerNotAllowed": "Le fournisseur '{{provider}}' n'est pas autorisé par votre organisation", "modelNotAllowed": "Le modèle '{{model}}' n'est pas autorisé pour le fournisseur '{{provider}}' par votre organisation", "profileInvalid": "Ce profil contient un fournisseur ou un modèle qui n'est pas autorisé par votre organisation", diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index d9d8184fbb..975e35411e 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -825,6 +825,7 @@ "regionMismatch": "चेतावनी: आपके ARN में क्षेत्र ({{arnRegion}}) आपके चयनित क्षेत्र ({{region}}) से मेल नहीं खाता। इससे पहुंच संबंधी समस्याएं हो सकती हैं। प्रदाता ARN से क्षेत्र का उपयोग करेगा।" }, "modelAvailability": "आपके द्वारा प्रदान की गई मॉडल ID ({{modelId}}) उपलब्ध नहीं है। कृपया कोई अन्य मॉडल चुनें।", + "modelDeprecated": "यह मॉडल अब उपलब्ध नहीं है। कृपया कोई अन्य मॉडल चुनें।", "providerNotAllowed": "प्रदाता '{{provider}}' आपके संगठन द्वारा अनुमत नहीं है", "modelNotAllowed": "मॉडल '{{model}}' प्रदाता '{{provider}}' के लिए आपके संगठन द्वारा अनुमत नहीं है", "profileInvalid": "इस प्रोफ़ाइल में एक प्रदाता या मॉडल शामिल है जो आपके संगठन द्वारा अनुमत नहीं है", diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json index 187f42958b..aa2c117211 100644 --- a/webview-ui/src/i18n/locales/id/settings.json +++ b/webview-ui/src/i18n/locales/id/settings.json @@ -854,6 +854,7 @@ "regionMismatch": "Peringatan: Region di ARN kamu ({{arnRegion}}) tidak cocok dengan region yang kamu pilih ({{region}}). Ini dapat menyebabkan masalah akses. Provider akan menggunakan region dari ARN." }, "modelAvailability": "Model ID ({{modelId}}) yang kamu berikan tidak tersedia. Silakan pilih model yang berbeda.", + "modelDeprecated": "Model ini tidak lagi tersedia. Silakan pilih model yang berbeda.", "providerNotAllowed": "Provider '{{provider}}' tidak diizinkan oleh organisasi kamu", "modelNotAllowed": "Model '{{model}}' tidak diizinkan untuk provider '{{provider}}' oleh organisasi kamu", "profileInvalid": "Profil ini berisi provider atau model yang tidak diizinkan oleh organisasi kamu", diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index 335877b0a8..6f2e06bb8f 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -825,6 +825,7 @@ "regionMismatch": "Attenzione: La regione nel tuo ARN ({{arnRegion}}) non corrisponde alla regione selezionata ({{region}}). Questo potrebbe causare problemi di accesso. Il provider utilizzerà la regione dall'ARN." }, "modelAvailability": "L'ID modello ({{modelId}}) fornito non è disponibile. Seleziona un modello diverso.", + "modelDeprecated": "Questo modello non è più disponibile. Seleziona un modello diverso.", "providerNotAllowed": "Il fornitore '{{provider}}' non è consentito dalla tua organizzazione", "modelNotAllowed": "Il modello '{{model}}' non è consentito per il fornitore '{{provider}}' dalla tua organizzazione.", "profileInvalid": "Questo profilo contiene un fornitore o un modello non consentito dalla tua organizzazione.", diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index bce95eeab2..cc1ea09317 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -825,6 +825,7 @@ "regionMismatch": "警告:ARN内のリージョン({{arnRegion}})が選択したリージョン({{region}})と一致しません。これによりアクセスの問題が発生する可能性があります。プロバイダーはARNのリージョンを使用します。" }, "modelAvailability": "指定されたモデルID({{modelId}})は利用できません。別のモデルを選択してください。", + "modelDeprecated": "このモデルは利用できなくなりました。別のモデルを選択してください。", "providerNotAllowed": "プロバイダー「{{provider}}」は組織によって許可されていません", "modelNotAllowed": "モデル「{{model}}」はプロバイダー「{{provider}}」に対して組織によって許可されていません", "profileInvalid": "このプロファイルには、組織によって許可されていないプロバイダーまたはモデルが含まれています", diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index f7aec2f4ce..61539cfc4d 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -825,6 +825,7 @@ "regionMismatch": "경고: ARN의 리전({{arnRegion}})이 선택한 리전({{region}})과 일치하지 않습니다. 접근 문제가 발생할 수 있습니다. 제공자는 ARN의 리전을 사용합니다." }, "modelAvailability": "제공한 모델 ID({{modelId}})를 사용할 수 없습니다. 다른 모델을 선택하세요.", + "modelDeprecated": "이 모델은 더 이상 사용할 수 없습니다. 다른 모델을 선택하세요.", "providerNotAllowed": "제공자 '{{provider}}'는 조직에서 허용되지 않습니다", "modelNotAllowed": "모델 '{{model}}'은 제공자 '{{provider}}'에 대해 조직에서 허용되지 않습니다", "profileInvalid": "이 프로필에는 조직에서 허용되지 않는 제공자 또는 모델이 포함되어 있습니다", diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json index d5b246e22a..41ee3e5910 100644 --- a/webview-ui/src/i18n/locales/nl/settings.json +++ b/webview-ui/src/i18n/locales/nl/settings.json @@ -825,6 +825,7 @@ "regionMismatch": "Waarschuwing: De regio in je ARN ({{arnRegion}}) komt niet overeen met je geselecteerde regio ({{region}}). Dit kan toegangsfouten veroorzaken. De provider gebruikt de regio uit de ARN." }, "modelAvailability": "Het opgegeven model-ID ({{modelId}}) is niet beschikbaar. Kies een ander model.", + "modelDeprecated": "Dit model is niet meer beschikbaar. Kies een ander model.", "providerNotAllowed": "Provider '{{provider}}' is niet toegestaan door je organisatie", "modelNotAllowed": "Model '{{model}}' is niet toegestaan voor provider '{{provider}}' door je organisatie", "profileInvalid": "Dit profiel bevat een provider of model dat niet is toegestaan door je organisatie", diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index 385a38fe2c..6862d6f7ed 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -825,6 +825,7 @@ "regionMismatch": "Ostrzeżenie: Region w Twoim ARN ({{arnRegion}}) nie zgadza się z wybranym regionem ({{region}}). Może to powodować problemy z dostępem. Dostawca użyje regionu z ARN." }, "modelAvailability": "Podane ID modelu ({{modelId}}) jest niedostępne. Wybierz inny model.", + "modelDeprecated": "Ten model nie jest już dostępny. Wybierz inny model.", "providerNotAllowed": "Dostawca '{{provider}}' nie jest dozwolony przez Twoją organizację", "modelNotAllowed": "Model '{{model}}' nie jest dozwolony dla dostawcy '{{provider}}' przez Twoją organizację", "profileInvalid": "Ten profil zawiera dostawcę lub model, który nie jest dozwolony przez Twoją organizację", diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index be2ff89ff7..b8184777ac 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -825,6 +825,7 @@ "regionMismatch": "Aviso: A região em seu ARN ({{arnRegion}}) não corresponde à região selecionada ({{region}}). Isso pode causar problemas de acesso. O provedor usará a região do ARN." }, "modelAvailability": "O ID do modelo ({{modelId}}) que você forneceu não está disponível. Por favor, escolha outro modelo.", + "modelDeprecated": "Este modelo não está mais disponível. Por favor, selecione um modelo diferente.", "providerNotAllowed": "O provedor '{{provider}}' não é permitido pela sua organização", "modelNotAllowed": "O modelo '{{model}}' não é permitido para o provedor '{{provider}}' pela sua organização", "profileInvalid": "Este perfil contém um provedor ou modelo que não é permitido pela sua organização", diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json index b429f01f4e..bcbd72089a 100644 --- a/webview-ui/src/i18n/locales/ru/settings.json +++ b/webview-ui/src/i18n/locales/ru/settings.json @@ -825,6 +825,7 @@ "regionMismatch": "Внимание: регион в вашем ARN ({{arnRegion}}) не совпадает с выбранным регионом ({{region}}). Это может вызвать проблемы с доступом. Провайдер будет использовать регион из ARN." }, "modelAvailability": "ID модели ({{modelId}}), который вы указали, недоступен. Пожалуйста, выберите другую модель.", + "modelDeprecated": "Эта модель больше недоступна. Пожалуйста, выберите другую модель.", "providerNotAllowed": "Провайдер '{{provider}}' не разрешен вашей организацией", "modelNotAllowed": "Модель '{{model}}' не разрешена для провайдера '{{provider}}' вашей организацией", "profileInvalid": "Этот профиль содержит провайдера или модель, которые не разрешены вашей организацией", diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index 429599d7ea..4ac28f47d2 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -825,6 +825,7 @@ "regionMismatch": "Uyarı: ARN'nizdeki bölge ({{arnRegion}}) seçtiğiniz bölge ({{region}}) ile eşleşmiyor. Bu erişim sorunlarına neden olabilir. Sağlayıcı, ARN'deki bölgeyi kullanacak." }, "modelAvailability": "Sağladığınız model kimliği ({{modelId}}) kullanılamıyor. Lütfen başka bir model seçin.", + "modelDeprecated": "Bu model artık kullanılamıyor. Lütfen farklı bir model seçin.", "providerNotAllowed": "Sağlayıcı '{{provider}}' kuruluşunuz tarafından izin verilmiyor", "modelNotAllowed": "Model '{{model}}' sağlayıcı '{{provider}}' için kuruluşunuz tarafından izin verilmiyor", "profileInvalid": "Bu profil, kuruluşunuz tarafından izin verilmeyen bir sağlayıcı veya model içeriyor", diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index 35fd639ba6..4303325d06 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -825,6 +825,7 @@ "regionMismatch": "Cảnh báo: Vùng trong ARN của bạn ({{arnRegion}}) không khớp với vùng bạn đã chọn ({{region}}). Điều này có thể gây ra vấn đề truy cập. Nhà cung cấp sẽ sử dụng vùng từ ARN." }, "modelAvailability": "ID mô hình ({{modelId}}) bạn đã cung cấp không khả dụng. Vui lòng chọn một mô hình khác.", + "modelDeprecated": "Mô hình này không còn khả dụng. Vui lòng chọn một mô hình khác.", "providerNotAllowed": "Nhà cung cấp '{{provider}}' không được phép bởi tổ chức của bạn", "modelNotAllowed": "Mô hình '{{model}}' không được phép cho nhà cung cấp '{{provider}}' bởi tổ chức của bạn", "profileInvalid": "Hồ sơ này chứa một nhà cung cấp hoặc mô hình không được phép bởi tổ chức của bạn", diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index abb3e44637..f574106f45 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -825,6 +825,7 @@ "regionMismatch": "警告:您的 ARN 中的区域 ({{arnRegion}}) 与您选择的区域 ({{region}}) 不匹配。这可能会导致访问问题。提供程序将使用 ARN 中的区域。" }, "modelAvailability": "模型ID {{modelId}} 不可用,请重新选择", + "modelDeprecated": "此模型不再可用,请选择其他模型。", "providerNotAllowed": "提供商 '{{provider}}' 不允许用于您的组织", "modelNotAllowed": "模型 '{{model}}' 不允许用于提供商 '{{provider}}',您的组织不允许", "profileInvalid": "此配置文件包含您的组织不允许的提供商或模型", diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index 91f7c5677a..67e8c43b60 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -825,6 +825,7 @@ "regionMismatch": "警告:您 ARN 中的區域 ({{arnRegion}}) 與您選擇的區域 ({{region}}) 不符,可能導致存取問題。系統將使用 ARN 中指定的區域。" }, "modelAvailability": "您指定的模型 ID ({{modelId}}) 目前無法使用,請選擇其他模型。", + "modelDeprecated": "此模型已停用,請選擇其他模型。", "providerNotAllowed": "供應商 '{{provider}}' 不允許用於您的組織。", "modelNotAllowed": "模型 '{{model}}' 不允許用於供應商 '{{provider}}',您的組織不允許", "profileInvalid": "此設定檔包含您的組織不允許的供應商或模型",