diff --git a/webview-ui/src/components/settings/ApiOptions.tsx b/webview-ui/src/components/settings/ApiOptions.tsx
index 37c1c286b983..ada74d58f3fd 100644
--- a/webview-ui/src/components/settings/ApiOptions.tsx
+++ b/webview-ui/src/components/settings/ApiOptions.tsx
@@ -279,11 +279,30 @@ const ApiOptions = ({
}))
: []
- return availableModels
- }, [selectedProvider, organizationAllowList, selectedModelId])
+ const modelOptions = [...availableModels]
+
+ // Include the currently selected model if it's been removed
+ if (selectedModelId && !modelOptions.find((opt) => opt.value === selectedModelId)) {
+ modelOptions.unshift({
+ value: selectedModelId,
+ label: `${selectedModelId} (${t("settings:providers.modelUnavailable")})`,
+ })
+ }
+
+ return modelOptions
+ }, [selectedProvider, organizationAllowList, selectedModelId, t])
const onProviderChange = useCallback(
(value: ProviderName) => {
+ // Check if the current model is removed (not in the filtered models list)
+ const currentProviderModels = MODELS_BY_PROVIDER[selectedProvider]
+ const isModelRemoved =
+ selectedModelId &&
+ currentProviderModels &&
+ !Object.keys(
+ filterModels(currentProviderModels, selectedProvider, organizationAllowList) || {},
+ ).includes(selectedModelId)
+
setApiConfigurationField("apiProvider", value)
// It would be much easier to have a single attribute that stores
@@ -301,9 +320,7 @@ const ApiOptions = ({
// in case we haven't set a default value for a provider
if (!defaultValue) return
- // only set default if no model is set, but don't reset invalid models
- // let users see and decide what to do with invalid model selections
- const shouldSetDefault = !modelId
+ const shouldSetDefault = !modelId || isModelRemoved
if (shouldSetDefault) {
setApiConfigurationField(field, defaultValue, false)
@@ -368,7 +385,7 @@ const ApiOptions = ({
)
}
},
- [setApiConfigurationField, apiConfiguration],
+ [setApiConfigurationField, apiConfiguration, selectedProvider, selectedModelId, organizationAllowList],
)
const modelValidationError = useMemo(() => {
diff --git a/webview-ui/src/components/settings/__tests__/ApiOptions.spec.tsx b/webview-ui/src/components/settings/__tests__/ApiOptions.spec.tsx
index 7b7f9b33e48d..733c49634c32 100644
--- a/webview-ui/src/components/settings/__tests__/ApiOptions.spec.tsx
+++ b/webview-ui/src/components/settings/__tests__/ApiOptions.spec.tsx
@@ -563,4 +563,48 @@ describe("ApiOptions", () => {
expect(screen.queryByTestId("litellm-provider")).not.toBeInTheDocument()
})
})
+
+ describe("Removed model handling", () => {
+ it("renders without errors when a removed model is selected", () => {
+ // This test verifies that the component handles removed models gracefully
+ // by still rendering the UI without crashing
+ const mockSetApiConfigurationField = vi.fn()
+
+ renderApiOptions({
+ apiConfiguration: {
+ apiProvider: "anthropic",
+ apiModelId: "claude-2.1", // A model that might be removed
+ },
+ setApiConfigurationField: mockSetApiConfigurationField,
+ })
+
+ // Verify the component rendered successfully
+ expect(screen.getByTestId("provider-select")).toBeInTheDocument()
+
+ // The component should render even with a potentially removed model
+ // The actual model validation and fallback is handled by the API
+ })
+
+ it("allows provider switching even with a removed model", () => {
+ const mockSetApiConfigurationField = vi.fn()
+
+ renderApiOptions({
+ apiConfiguration: {
+ apiProvider: "anthropic",
+ apiModelId: "claude-2.1", // A model that might be removed
+ },
+ setApiConfigurationField: mockSetApiConfigurationField,
+ })
+
+ // Find and change the provider select
+ const providerSelect = screen.getByTestId("provider-select").querySelector("select")
+ expect(providerSelect).toBeInTheDocument()
+
+ // Switch to a different provider
+ fireEvent.change(providerSelect!, { target: { value: "openai" } })
+
+ // Verify that the provider change was registered
+ expect(mockSetApiConfigurationField).toHaveBeenCalledWith("apiProvider", "openai")
+ })
+ })
})
diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json
index 611159069b29..5772d4e9795c 100644
--- a/webview-ui/src/i18n/locales/ca/settings.json
+++ b/webview-ui/src/i18n/locales/ca/settings.json
@@ -223,6 +223,7 @@
"description": "Deseu diferents configuracions d'API per canviar ràpidament entre proveïdors i configuracions.",
"apiProvider": "Proveïdor d'API",
"model": "Model",
+ "modelUnavailable": "no disponible",
"nameEmpty": "El nom no pot estar buit",
"nameExists": "Ja existeix un perfil amb aquest nom",
"deleteProfile": "Esborrar perfil",
@@ -794,7 +795,8 @@
"label": "Model",
"searchPlaceholder": "Cerca",
"noMatchFound": "No s'ha trobat cap coincidència",
- "useCustomModel": "Utilitzar personalitzat: {{modelId}}"
+ "useCustomModel": "Utilitzar personalitzat: {{modelId}}",
+ "unavailable": "no disponible"
},
"footer": {
"feedback": "Si teniu qualsevol pregunta o comentari, no dubteu a obrir un issue a github.com/RooCodeInc/Roo-Code o unir-vos a reddit.com/r/RooCode o discord.gg/roocode",
diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json
index 00827751b0fd..3942217ac852 100644
--- a/webview-ui/src/i18n/locales/de/settings.json
+++ b/webview-ui/src/i18n/locales/de/settings.json
@@ -223,6 +223,7 @@
"description": "Speichern Sie verschiedene API-Konfigurationen, um schnell zwischen Anbietern und Einstellungen zu wechseln.",
"apiProvider": "API-Anbieter",
"model": "Modell",
+ "modelUnavailable": "nicht verfügbar",
"nameEmpty": "Name darf nicht leer sein",
"nameExists": "Ein Profil mit diesem Namen existiert bereits",
"deleteProfile": "Profil löschen",
@@ -794,7 +795,8 @@
"label": "Modell",
"searchPlaceholder": "Suchen",
"noMatchFound": "Keine Übereinstimmung gefunden",
- "useCustomModel": "Benutzerdefiniert verwenden: {{modelId}}"
+ "useCustomModel": "Benutzerdefiniert verwenden: {{modelId}}",
+ "unavailable": "nicht verfügbar"
},
"footer": {
"feedback": "Wenn du Fragen oder Feedback hast, kannst du gerne ein Issue auf github.com/RooCodeInc/Roo-Code eröffnen oder reddit.com/r/RooCode oder discord.gg/roocode beitreten",
diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json
index dfccc49cc4ce..75a3503d62bd 100644
--- a/webview-ui/src/i18n/locales/en/settings.json
+++ b/webview-ui/src/i18n/locales/en/settings.json
@@ -228,6 +228,7 @@
"description": "Save different API configurations to quickly switch between providers and settings.",
"apiProvider": "API Provider",
"model": "Model",
+ "modelUnavailable": "unavailable",
"nameEmpty": "Name cannot be empty",
"nameExists": "A profile with this name already exists",
"deleteProfile": "Delete Profile",
@@ -799,7 +800,8 @@
"label": "Model",
"searchPlaceholder": "Search",
"noMatchFound": "No match found",
- "useCustomModel": "Use custom: {{modelId}}"
+ "useCustomModel": "Use custom: {{modelId}}",
+ "unavailable": "unavailable"
},
"footer": {
"feedback": "If you have any questions or feedback, feel free to open an issue at github.com/RooCodeInc/Roo-Code or join reddit.com/r/RooCode or discord.gg/roocode",
diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json
index c1271df82740..efef74df86a5 100644
--- a/webview-ui/src/i18n/locales/es/settings.json
+++ b/webview-ui/src/i18n/locales/es/settings.json
@@ -223,6 +223,7 @@
"description": "Guarde diferentes configuraciones de API para cambiar rápidamente entre proveedores y ajustes.",
"apiProvider": "Proveedor de API",
"model": "Modelo",
+ "modelUnavailable": "no disponible",
"nameEmpty": "El nombre no puede estar vacío",
"nameExists": "Ya existe un perfil con este nombre",
"deleteProfile": "Eliminar perfil",
@@ -794,7 +795,8 @@
"label": "Modelo",
"searchPlaceholder": "Buscar",
"noMatchFound": "No se encontraron coincidencias",
- "useCustomModel": "Usar personalizado: {{modelId}}"
+ "useCustomModel": "Usar personalizado: {{modelId}}",
+ "unavailable": "no disponible"
},
"footer": {
"feedback": "Si tiene alguna pregunta o comentario, no dude en abrir un issue en github.com/RooCodeInc/Roo-Code o unirse a reddit.com/r/RooCode o discord.gg/roocode",
diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json
index abcf401d6402..59cc95458da0 100644
--- a/webview-ui/src/i18n/locales/fr/settings.json
+++ b/webview-ui/src/i18n/locales/fr/settings.json
@@ -223,6 +223,7 @@
"description": "Enregistrez différentes configurations d'API pour basculer rapidement entre les fournisseurs et les paramètres.",
"apiProvider": "Fournisseur d'API",
"model": "Modèle",
+ "modelUnavailable": "indisponible",
"nameEmpty": "Le nom ne peut pas être vide",
"nameExists": "Un profil avec ce nom existe déjà",
"deleteProfile": "Supprimer le profil",
@@ -794,7 +795,8 @@
"label": "Modèle",
"searchPlaceholder": "Rechercher",
"noMatchFound": "Aucune correspondance trouvée",
- "useCustomModel": "Utiliser personnalisé : {{modelId}}"
+ "useCustomModel": "Utiliser personnalisé : {{modelId}}",
+ "unavailable": "indisponible"
},
"footer": {
"feedback": "Si vous avez des questions ou des commentaires, n'hésitez pas à ouvrir un problème sur github.com/RooCodeInc/Roo-Code ou à rejoindre reddit.com/r/RooCode ou discord.gg/roocode",
diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json
index 975e35411eea..4d8e79d186e5 100644
--- a/webview-ui/src/i18n/locales/hi/settings.json
+++ b/webview-ui/src/i18n/locales/hi/settings.json
@@ -223,6 +223,7 @@
"description": "विभिन्न API कॉन्फ़िगरेशन सहेजें ताकि प्रदाताओं और सेटिंग्स के बीच त्वरित रूप से स्विच कर सकें।",
"apiProvider": "API प्रदाता",
"model": "मॉडल",
+ "modelUnavailable": "अनुपलब्ध",
"nameEmpty": "नाम खाली नहीं हो सकता",
"nameExists": "इस नाम वाला प्रोफ़ाइल पहले से मौजूद है",
"deleteProfile": "प्रोफ़ाइल हटाएं",
@@ -795,7 +796,8 @@
"label": "मॉडल",
"searchPlaceholder": "खोजें",
"noMatchFound": "कोई मिलान नहीं मिला",
- "useCustomModel": "कस्टम उपयोग करें: {{modelId}}"
+ "useCustomModel": "कस्टम उपयोग करें: {{modelId}}",
+ "unavailable": "अनुपलब्ध"
},
"footer": {
"feedback": "यदि आपके कोई प्रश्न या प्रतिक्रिया है, तो github.com/RooCodeInc/Roo-Code पर एक मुद्दा खोलने या reddit.com/r/RooCode या discord.gg/roocode में शामिल होने में संकोच न करें",
diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json
index aa2c1172119a..c07da2040fdd 100644
--- a/webview-ui/src/i18n/locales/id/settings.json
+++ b/webview-ui/src/i18n/locales/id/settings.json
@@ -227,6 +227,7 @@
"description": "Simpan konfigurasi API yang berbeda untuk beralih dengan cepat antara provider dan pengaturan.",
"apiProvider": "Provider API",
"model": "Model",
+ "modelUnavailable": "tidak tersedia",
"nameEmpty": "Nama tidak boleh kosong",
"nameExists": "Profil dengan nama ini sudah ada",
"deleteProfile": "Hapus Profil",
@@ -824,7 +825,8 @@
"label": "Model",
"searchPlaceholder": "Cari",
"noMatchFound": "Tidak ada yang cocok ditemukan",
- "useCustomModel": "Gunakan kustom: {{modelId}}"
+ "useCustomModel": "Gunakan kustom: {{modelId}}",
+ "unavailable": "tidak tersedia"
},
"footer": {
"feedback": "Jika kamu punya pertanyaan atau feedback, jangan ragu untuk membuka issue di github.com/RooCodeInc/Roo-Code atau bergabung reddit.com/r/RooCode atau discord.gg/roocode",
diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json
index 6f2e06bb8fd6..1025829438af 100644
--- a/webview-ui/src/i18n/locales/it/settings.json
+++ b/webview-ui/src/i18n/locales/it/settings.json
@@ -223,6 +223,7 @@
"description": "Salva diverse configurazioni API per passare rapidamente tra fornitori e impostazioni.",
"apiProvider": "Fornitore API",
"model": "Modello",
+ "modelUnavailable": "non disponibile",
"nameEmpty": "Il nome non può essere vuoto",
"nameExists": "Esiste già un profilo con questo nome",
"deleteProfile": "Elimina profilo",
@@ -795,7 +796,8 @@
"label": "Modello",
"searchPlaceholder": "Cerca",
"noMatchFound": "Nessuna corrispondenza trovata",
- "useCustomModel": "Usa personalizzato: {{modelId}}"
+ "useCustomModel": "Usa personalizzato: {{modelId}}",
+ "unavailable": "non disponibile"
},
"footer": {
"feedback": "Se hai domande o feedback, sentiti libero di aprire un issue su github.com/RooCodeInc/Roo-Code o unirti a reddit.com/r/RooCode o discord.gg/roocode",
diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json
index cc1ea09317eb..f58e7cdaf12f 100644
--- a/webview-ui/src/i18n/locales/ja/settings.json
+++ b/webview-ui/src/i18n/locales/ja/settings.json
@@ -223,6 +223,7 @@
"description": "異なるAPI設定を保存して、プロバイダーと設定をすばやく切り替えることができます。",
"apiProvider": "APIプロバイダー",
"model": "モデル",
+ "modelUnavailable": "利用不可",
"nameEmpty": "名前を空にすることはできません",
"nameExists": "この名前のプロファイルは既に存在します",
"deleteProfile": "プロファイルを削除",
@@ -795,7 +796,8 @@
"label": "モデル",
"searchPlaceholder": "検索",
"noMatchFound": "一致するものが見つかりません",
- "useCustomModel": "カスタムを使用: {{modelId}}"
+ "useCustomModel": "カスタムを使用: {{modelId}}",
+ "unavailable": "利用不可"
},
"footer": {
"feedback": "質問やフィードバックがある場合は、github.com/RooCodeInc/Roo-Codeで問題を開くか、reddit.com/r/RooCodeやdiscord.gg/roocodeに参加してください",
diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json
index 61539cfc4d9f..18e0652c8505 100644
--- a/webview-ui/src/i18n/locales/ko/settings.json
+++ b/webview-ui/src/i18n/locales/ko/settings.json
@@ -223,6 +223,7 @@
"description": "다양한 API 구성을 저장하여 제공자와 설정 간에 빠르게 전환할 수 있습니다.",
"apiProvider": "API 제공자",
"model": "모델",
+ "modelUnavailable": "사용 불가",
"nameEmpty": "이름은 비워둘 수 없습니다",
"nameExists": "이 이름의 프로필이 이미 존재합니다",
"deleteProfile": "프로필 삭제",
@@ -795,7 +796,8 @@
"label": "모델",
"searchPlaceholder": "검색",
"noMatchFound": "일치하는 항목 없음",
- "useCustomModel": "사용자 정의 사용: {{modelId}}"
+ "useCustomModel": "사용자 정의 사용: {{modelId}}",
+ "unavailable": "사용 불가"
},
"footer": {
"feedback": "질문이나 피드백이 있으시면 github.com/RooCodeInc/Roo-Code에서 이슈를 열거나 reddit.com/r/RooCode 또는 discord.gg/roocode에 가입하세요",
diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json
index 41ee3e5910bb..b8c53cb8d18c 100644
--- a/webview-ui/src/i18n/locales/nl/settings.json
+++ b/webview-ui/src/i18n/locales/nl/settings.json
@@ -223,6 +223,7 @@
"description": "Sla verschillende API-configuraties op om snel te wisselen tussen providers en instellingen.",
"apiProvider": "API-provider",
"model": "Model",
+ "modelUnavailable": "niet beschikbaar",
"nameEmpty": "Naam mag niet leeg zijn",
"nameExists": "Er bestaat al een profiel met deze naam",
"deleteProfile": "Profiel verwijderen",
@@ -795,7 +796,8 @@
"label": "Model",
"searchPlaceholder": "Zoeken",
"noMatchFound": "Geen overeenkomsten gevonden",
- "useCustomModel": "Aangepast gebruiken: {{modelId}}"
+ "useCustomModel": "Aangepast gebruiken: {{modelId}}",
+ "unavailable": "niet beschikbaar"
},
"footer": {
"feedback": "Heb je vragen of feedback? Open gerust een issue op github.com/RooCodeInc/Roo-Code of sluit je aan bij reddit.com/r/RooCode of discord.gg/roocode",
diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json
index 6862d6f7edda..87bc60f8fe3c 100644
--- a/webview-ui/src/i18n/locales/pl/settings.json
+++ b/webview-ui/src/i18n/locales/pl/settings.json
@@ -223,6 +223,7 @@
"description": "Zapisz różne konfiguracje API, aby szybko przełączać się między dostawcami i ustawieniami.",
"apiProvider": "Dostawca API",
"model": "Model",
+ "modelUnavailable": "niedostępny",
"nameEmpty": "Nazwa nie może być pusta",
"nameExists": "Profil o tej nazwie już istnieje",
"deleteProfile": "Usuń profil",
@@ -795,7 +796,8 @@
"label": "Model",
"searchPlaceholder": "Wyszukaj",
"noMatchFound": "Nie znaleziono dopasowań",
- "useCustomModel": "Użyj niestandardowy: {{modelId}}"
+ "useCustomModel": "Użyj niestandardowy: {{modelId}}",
+ "unavailable": "niedostępny"
},
"footer": {
"feedback": "Jeśli masz jakiekolwiek pytania lub opinie, śmiało otwórz zgłoszenie na github.com/RooCodeInc/Roo-Code lub dołącz do reddit.com/r/RooCode lub discord.gg/roocode",
diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json
index b8184777acf0..c443bfe87f6d 100644
--- a/webview-ui/src/i18n/locales/pt-BR/settings.json
+++ b/webview-ui/src/i18n/locales/pt-BR/settings.json
@@ -223,6 +223,7 @@
"description": "Salve diferentes configurações de API para alternar rapidamente entre provedores e configurações.",
"apiProvider": "Provedor de API",
"model": "Modelo",
+ "modelUnavailable": "indisponível",
"nameEmpty": "O nome não pode estar vazio",
"nameExists": "Já existe um perfil com este nome",
"deleteProfile": "Excluir perfil",
@@ -795,7 +796,8 @@
"label": "Modelo",
"searchPlaceholder": "Pesquisar",
"noMatchFound": "Nenhuma correspondência encontrada",
- "useCustomModel": "Usar personalizado: {{modelId}}"
+ "useCustomModel": "Usar personalizado: {{modelId}}",
+ "unavailable": "indisponível"
},
"footer": {
"feedback": "Se tiver alguma dúvida ou feedback, sinta-se à vontade para abrir um problema em github.com/RooCodeInc/Roo-Code ou juntar-se a reddit.com/r/RooCode ou discord.gg/roocode",
diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json
index bcbd72089a45..032178af890d 100644
--- a/webview-ui/src/i18n/locales/ru/settings.json
+++ b/webview-ui/src/i18n/locales/ru/settings.json
@@ -223,6 +223,7 @@
"description": "Сохраняйте различные конфигурации API для быстрого переключения между провайдерами и настройками.",
"apiProvider": "Провайдер API",
"model": "Модель",
+ "modelUnavailable": "недоступна",
"nameEmpty": "Имя не может быть пустым",
"nameExists": "Профиль с таким именем уже существует",
"deleteProfile": "Удалить профиль",
@@ -795,7 +796,8 @@
"label": "Модель",
"searchPlaceholder": "Поиск",
"noMatchFound": "Совпадений не найдено",
- "useCustomModel": "Использовать пользовательскую: {{modelId}}"
+ "useCustomModel": "Использовать пользовательскую: {{modelId}}",
+ "unavailable": "недоступна"
},
"footer": {
"feedback": "Если у вас есть вопросы или предложения, откройте issue на github.com/RooCodeInc/Roo-Code или присоединяйтесь к reddit.com/r/RooCode или discord.gg/roocode",
diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json
index 4ac28f47d2f2..c1d8ed23d99a 100644
--- a/webview-ui/src/i18n/locales/tr/settings.json
+++ b/webview-ui/src/i18n/locales/tr/settings.json
@@ -223,6 +223,7 @@
"description": "Sağlayıcılar ve ayarlar arasında hızlıca geçiş yapmak için farklı API yapılandırmalarını kaydedin.",
"apiProvider": "API Sağlayıcı",
"model": "Model",
+ "modelUnavailable": "kullanılamıyor",
"nameEmpty": "İsim boş olamaz",
"nameExists": "Bu isme sahip bir profil zaten mevcut",
"deleteProfile": "Profili sil",
@@ -795,7 +796,8 @@
"label": "Model",
"searchPlaceholder": "Ara",
"noMatchFound": "Eşleşme bulunamadı",
- "useCustomModel": "Özel kullan: {{modelId}}"
+ "useCustomModel": "Özel kullan: {{modelId}}",
+ "unavailable": "kullanılamıyor"
},
"footer": {
"feedback": "Herhangi bir sorunuz veya geri bildiriminiz varsa, github.com/RooCodeInc/Roo-Code adresinde bir konu açmaktan veya reddit.com/r/RooCode ya da discord.gg/roocode'a katılmaktan çekinmeyin",
diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json
index 4303325d068e..9b7b114549f3 100644
--- a/webview-ui/src/i18n/locales/vi/settings.json
+++ b/webview-ui/src/i18n/locales/vi/settings.json
@@ -223,6 +223,7 @@
"description": "Lưu các cấu hình API khác nhau để nhanh chóng chuyển đổi giữa các nhà cung cấp và cài đặt.",
"apiProvider": "Nhà cung cấp API",
"model": "Mẫu",
+ "modelUnavailable": "không khả dụng",
"nameEmpty": "Tên không được để trống",
"nameExists": "Đã tồn tại một hồ sơ với tên này",
"deleteProfile": "Xóa hồ sơ",
@@ -795,7 +796,8 @@
"label": "Mô hình",
"searchPlaceholder": "Tìm kiếm",
"noMatchFound": "Không tìm thấy kết quả",
- "useCustomModel": "Sử dụng tùy chỉnh: {{modelId}}"
+ "useCustomModel": "Sử dụng tùy chỉnh: {{modelId}}",
+ "unavailable": "không khả dụng"
},
"footer": {
"feedback": "Nếu bạn có bất kỳ câu hỏi hoặc phản hồi nào, vui lòng mở một vấn đề tại github.com/RooCodeInc/Roo-Code hoặc tham gia reddit.com/r/RooCode hoặc discord.gg/roocode",
diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json
index f574106f4568..cd46b30a4824 100644
--- a/webview-ui/src/i18n/locales/zh-CN/settings.json
+++ b/webview-ui/src/i18n/locales/zh-CN/settings.json
@@ -223,6 +223,7 @@
"description": "保存多组API配置便于快速切换",
"apiProvider": "API提供商",
"model": "模型",
+ "modelUnavailable": "不可用",
"nameEmpty": "名称不能为空",
"nameExists": "已存在同名的配置文件",
"deleteProfile": "删除配置文件",
@@ -795,7 +796,8 @@
"label": "模型",
"searchPlaceholder": "搜索",
"noMatchFound": "未找到匹配项",
- "useCustomModel": "使用自定义:{{modelId}}"
+ "useCustomModel": "使用自定义:{{modelId}}",
+ "unavailable": "不可用"
},
"footer": {
"feedback": "如果您有任何问题或反馈,请随时在 github.com/RooCodeInc/Roo-Code 上提出问题或加入 reddit.com/r/RooCode 或 discord.gg/roocode",
diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json
index 67e8c43b60a9..2c44b9cedb96 100644
--- a/webview-ui/src/i18n/locales/zh-TW/settings.json
+++ b/webview-ui/src/i18n/locales/zh-TW/settings.json
@@ -223,6 +223,7 @@
"description": "儲存不同的 API 設定以快速切換供應商和設定。",
"apiProvider": "API 供應商",
"model": "模型",
+ "modelUnavailable": "無法使用",
"nameEmpty": "名稱不能為空",
"nameExists": "已存在同名的設定檔",
"deleteProfile": "刪除設定檔",
@@ -795,7 +796,8 @@
"label": "模型",
"searchPlaceholder": "搜尋",
"noMatchFound": "找不到符合的項目",
- "useCustomModel": "使用自訂模型:{{modelId}}"
+ "useCustomModel": "使用自訂模型:{{modelId}}",
+ "unavailable": "無法使用"
},
"footer": {
"feedback": "若您有任何問題或建議,歡迎至 github.com/RooCodeInc/Roo-Code 提出 issue,或加入 reddit.com/r/RooCode 或 discord.gg/roocode 討論。",