diff --git a/webview-ui/src/components/settings/providers/HuggingFace.tsx b/webview-ui/src/components/settings/providers/HuggingFace.tsx
index a87c59ec72..d4195492dd 100644
--- a/webview-ui/src/components/settings/providers/HuggingFace.tsx
+++ b/webview-ui/src/components/settings/providers/HuggingFace.tsx
@@ -154,8 +154,14 @@ export const HuggingFace = ({ apiConfiguration, setApiConfigurationField }: Hugg
{currentModel && availableProviders.length > 0 && (
-
+
({
value: mapping.provider,
@@ -189,9 +195,9 @@ export const HuggingFace = ({ apiConfiguration, setApiConfigurationField }: Hugg
}),
),
]}
- placeholder="Select a provider..."
- searchPlaceholder="Search providers..."
- emptyMessage="No providers found"
+ placeholder={t("settings:providers.huggingFaceSelectProvider")}
+ searchPlaceholder={t("settings:providers.huggingFaceSearchProviders")}
+ emptyMessage={t("settings:providers.huggingFaceNoProvidersFound")}
/>
)}
diff --git a/webview-ui/src/components/settings/providers/__tests__/HuggingFace.spec.tsx b/webview-ui/src/components/settings/providers/__tests__/HuggingFace.spec.tsx
new file mode 100644
index 0000000000..3fd29e4c72
--- /dev/null
+++ b/webview-ui/src/components/settings/providers/__tests__/HuggingFace.spec.tsx
@@ -0,0 +1,162 @@
+import React from "react"
+import { render, screen } from "@/utils/test-utils"
+import { HuggingFace } from "../HuggingFace"
+import { ProviderSettings } from "@roo-code/types"
+
+// Mock the VSCodeTextField component
+vi.mock("@vscode/webview-ui-toolkit/react", () => ({
+ VSCodeTextField: ({
+ children,
+ value,
+ onInput,
+ placeholder,
+ className,
+ style,
+ "data-testid": dataTestId,
+ ...rest
+ }: any) => {
+ return (
+
+ {children}
+ onInput && onInput(e)}
+ placeholder={placeholder}
+ data-testid={dataTestId}
+ {...rest}
+ />
+
+ )
+ },
+ VSCodeLink: ({ children, href, onClick }: any) => (
+
+ {children}
+
+ ),
+ VSCodeButton: ({ children, onClick, ...rest }: any) => (
+
+ ),
+}))
+
+// Mock the translation hook
+vi.mock("@src/i18n/TranslationContext", () => ({
+ useAppTranslation: () => ({
+ t: (key: string) => {
+ // Return the key for testing, but simulate some actual translations
+ const translations: Record = {
+ "settings:providers.getHuggingFaceApiKey": "Get Hugging Face API Key",
+ "settings:providers.huggingFaceApiKey": "Hugging Face API Key",
+ "settings:providers.huggingFaceModelId": "Model ID",
+ }
+ return translations[key] || key
+ },
+ }),
+}))
+
+// Mock the UI components
+vi.mock("@src/components/ui", () => ({
+ Select: ({ children }: any) => {children}
,
+ SelectContent: ({ children }: any) => {children}
,
+ SelectItem: ({ children }: any) => {children}
,
+ SelectTrigger: ({ children }: any) => {children}
,
+ SelectValue: ({ placeholder }: any) => {placeholder}
,
+ SearchableSelect: ({ value, onValueChange, placeholder, children }: any) => (
+
+ onValueChange && onValueChange(e.target.value)}
+ placeholder={placeholder}
+ />
+ {children}
+
+ ),
+}))
+
+describe("HuggingFace Component", () => {
+ const mockSetApiConfigurationField = vi.fn()
+
+ beforeEach(() => {
+ vi.clearAllMocks()
+ })
+
+ it("should render with internationalized labels", () => {
+ const apiConfiguration: Partial = {
+ huggingFaceApiKey: "",
+ huggingFaceModelId: "",
+ }
+
+ render(
+ ,
+ )
+
+ // Check that the translated labels are rendered
+ expect(screen.getByText("Get Hugging Face API Key")).toBeInTheDocument()
+ expect(screen.getByText("Hugging Face API Key")).toBeInTheDocument()
+ expect(screen.getByText("Model ID")).toBeInTheDocument()
+ })
+
+ it("should render API key input field", () => {
+ const apiConfiguration: Partial = {
+ huggingFaceApiKey: "test-api-key",
+ huggingFaceModelId: "",
+ }
+
+ render(
+ ,
+ )
+
+ // Check that the API key input is rendered with the correct value
+ const apiKeyInput = screen.getByDisplayValue("test-api-key")
+ expect(apiKeyInput).toBeInTheDocument()
+ })
+
+ it("should render model selection components", () => {
+ const apiConfiguration: Partial = {
+ huggingFaceApiKey: "test-api-key",
+ huggingFaceModelId: "test-model",
+ }
+
+ render(
+ ,
+ )
+
+ // Check that the searchable select component is rendered
+ expect(screen.getByTestId("searchable-select")).toBeInTheDocument()
+ expect(screen.getByTestId("searchable-select-input")).toBeInTheDocument()
+ })
+
+ it("should display the get API key link", () => {
+ const apiConfiguration: Partial = {
+ huggingFaceApiKey: "",
+ huggingFaceModelId: "",
+ }
+
+ render(
+ ,
+ )
+
+ // Check that the API key button is rendered
+ const apiKeyButton = screen.getByTestId("vscode-button")
+ expect(apiKeyButton).toBeInTheDocument()
+ expect(apiKeyButton).toHaveTextContent("Get Hugging Face API Key")
+ })
+})
diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json
index cf17a6f919..d61aaa92fb 100644
--- a/webview-ui/src/i18n/locales/ca/settings.json
+++ b/webview-ui/src/i18n/locales/ca/settings.json
@@ -259,6 +259,19 @@
"geminiApiKey": "Clau API de Gemini",
"getGroqApiKey": "Obtenir clau API de Groq",
"groqApiKey": "Clau API de Groq",
+ "getHuggingFaceApiKey": "Obtenir clau API de Hugging Face",
+ "huggingFaceApiKey": "Clau API de Hugging Face",
+ "huggingFaceModelId": "ID del model",
+ "huggingFaceLoading": "Carregant...",
+ "huggingFaceModelsCount": "({{count}} models)",
+ "huggingFaceSelectModel": "Selecciona un model...",
+ "huggingFaceSearchModels": "Cerca models...",
+ "huggingFaceNoModelsFound": "No s'han trobat models",
+ "huggingFaceProvider": "Proveïdor",
+ "huggingFaceProviderAuto": "Automàtic",
+ "huggingFaceSelectProvider": "Selecciona un proveïdor...",
+ "huggingFaceSearchProviders": "Cerca proveïdors...",
+ "huggingFaceNoProvidersFound": "No s'han trobat proveïdors",
"getGeminiApiKey": "Obtenir clau API de Gemini",
"openAiApiKey": "Clau API d'OpenAI",
"apiKey": "Clau API",
diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json
index 20ffaec525..1cc9f571ad 100644
--- a/webview-ui/src/i18n/locales/de/settings.json
+++ b/webview-ui/src/i18n/locales/de/settings.json
@@ -259,6 +259,19 @@
"geminiApiKey": "Gemini API-Schlüssel",
"getGroqApiKey": "Groq API-Schlüssel erhalten",
"groqApiKey": "Groq API-Schlüssel",
+ "getHuggingFaceApiKey": "Hugging Face API-Schlüssel erhalten",
+ "huggingFaceApiKey": "Hugging Face API-Schlüssel",
+ "huggingFaceModelId": "Modell-ID",
+ "huggingFaceLoading": "Lädt...",
+ "huggingFaceModelsCount": "({{count}} Modelle)",
+ "huggingFaceSelectModel": "Modell auswählen...",
+ "huggingFaceSearchModels": "Modelle durchsuchen...",
+ "huggingFaceNoModelsFound": "Keine Modelle gefunden",
+ "huggingFaceProvider": "Anbieter",
+ "huggingFaceProviderAuto": "Automatisch",
+ "huggingFaceSelectProvider": "Anbieter auswählen...",
+ "huggingFaceSearchProviders": "Anbieter durchsuchen...",
+ "huggingFaceNoProvidersFound": "Keine Anbieter gefunden",
"getGeminiApiKey": "Gemini API-Schlüssel erhalten",
"openAiApiKey": "OpenAI API-Schlüssel",
"apiKey": "API-Schlüssel",
diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json
index c8d0e69719..cdf7b2e21c 100644
--- a/webview-ui/src/i18n/locales/en/settings.json
+++ b/webview-ui/src/i18n/locales/en/settings.json
@@ -262,6 +262,16 @@
"getHuggingFaceApiKey": "Get Hugging Face API Key",
"huggingFaceApiKey": "Hugging Face API Key",
"huggingFaceModelId": "Model ID",
+ "huggingFaceLoading": "Loading...",
+ "huggingFaceModelsCount": "({{count}} models)",
+ "huggingFaceSelectModel": "Select a model...",
+ "huggingFaceSearchModels": "Search models...",
+ "huggingFaceNoModelsFound": "No models found",
+ "huggingFaceProvider": "Provider",
+ "huggingFaceProviderAuto": "Auto",
+ "huggingFaceSelectProvider": "Select a provider...",
+ "huggingFaceSearchProviders": "Search providers...",
+ "huggingFaceNoProvidersFound": "No providers found",
"getGeminiApiKey": "Get Gemini API Key",
"openAiApiKey": "OpenAI API Key",
"apiKey": "API Key",
diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json
index 4c4f24bb0f..a25395fdf4 100644
--- a/webview-ui/src/i18n/locales/es/settings.json
+++ b/webview-ui/src/i18n/locales/es/settings.json
@@ -259,6 +259,19 @@
"geminiApiKey": "Clave API de Gemini",
"getGroqApiKey": "Obtener clave API de Groq",
"groqApiKey": "Clave API de Groq",
+ "getHuggingFaceApiKey": "Obtener clave API de Hugging Face",
+ "huggingFaceApiKey": "Clave API de Hugging Face",
+ "huggingFaceModelId": "ID del modelo",
+ "huggingFaceLoading": "Cargando...",
+ "huggingFaceModelsCount": "({{count}} modelos)",
+ "huggingFaceSelectModel": "Seleccionar un modelo...",
+ "huggingFaceSearchModels": "Buscar modelos...",
+ "huggingFaceNoModelsFound": "No se encontraron modelos",
+ "huggingFaceProvider": "Proveedor",
+ "huggingFaceProviderAuto": "Automático",
+ "huggingFaceSelectProvider": "Seleccionar un proveedor...",
+ "huggingFaceSearchProviders": "Buscar proveedores...",
+ "huggingFaceNoProvidersFound": "No se encontraron proveedores",
"getGeminiApiKey": "Obtener clave API de Gemini",
"openAiApiKey": "Clave API de OpenAI",
"apiKey": "Clave API",
diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json
index 6e7a964694..8983b57843 100644
--- a/webview-ui/src/i18n/locales/fr/settings.json
+++ b/webview-ui/src/i18n/locales/fr/settings.json
@@ -259,6 +259,19 @@
"geminiApiKey": "Clé API Gemini",
"getGroqApiKey": "Obtenir la clé API Groq",
"groqApiKey": "Clé API Groq",
+ "getHuggingFaceApiKey": "Obtenir la clé API Hugging Face",
+ "huggingFaceApiKey": "Clé API Hugging Face",
+ "huggingFaceModelId": "ID du modèle",
+ "huggingFaceLoading": "Chargement...",
+ "huggingFaceModelsCount": "({{count}} modèles)",
+ "huggingFaceSelectModel": "Sélectionner un modèle...",
+ "huggingFaceSearchModels": "Rechercher des modèles...",
+ "huggingFaceNoModelsFound": "Aucun modèle trouvé",
+ "huggingFaceProvider": "Fournisseur",
+ "huggingFaceProviderAuto": "Automatique",
+ "huggingFaceSelectProvider": "Sélectionner un fournisseur...",
+ "huggingFaceSearchProviders": "Rechercher des fournisseurs...",
+ "huggingFaceNoProvidersFound": "Aucun fournisseur trouvé",
"getGeminiApiKey": "Obtenir la clé API Gemini",
"openAiApiKey": "Clé API OpenAI",
"apiKey": "Clé API",
diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json
index ca255ca44e..75b84bbbd8 100644
--- a/webview-ui/src/i18n/locales/hi/settings.json
+++ b/webview-ui/src/i18n/locales/hi/settings.json
@@ -259,6 +259,19 @@
"geminiApiKey": "Gemini API कुंजी",
"getGroqApiKey": "Groq API कुंजी प्राप्त करें",
"groqApiKey": "Groq API कुंजी",
+ "getHuggingFaceApiKey": "Hugging Face API कुंजी प्राप्त करें",
+ "huggingFaceApiKey": "Hugging Face API कुंजी",
+ "huggingFaceModelId": "मॉडल ID",
+ "huggingFaceLoading": "लोड हो रहा है...",
+ "huggingFaceModelsCount": "({{count}} मॉडल)",
+ "huggingFaceSelectModel": "एक मॉडल चुनें...",
+ "huggingFaceSearchModels": "मॉडल खोजें...",
+ "huggingFaceNoModelsFound": "कोई मॉडल नहीं मिला",
+ "huggingFaceProvider": "प्रदाता",
+ "huggingFaceProviderAuto": "स्वचालित",
+ "huggingFaceSelectProvider": "एक प्रदाता चुनें...",
+ "huggingFaceSearchProviders": "प्रदाता खोजें...",
+ "huggingFaceNoProvidersFound": "कोई प्रदाता नहीं मिला",
"getGeminiApiKey": "Gemini API कुंजी प्राप्त करें",
"openAiApiKey": "OpenAI API कुंजी",
"apiKey": "API कुंजी",
diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json
index 0bff5ef4a1..8e795b9e16 100644
--- a/webview-ui/src/i18n/locales/id/settings.json
+++ b/webview-ui/src/i18n/locales/id/settings.json
@@ -263,7 +263,20 @@
"geminiApiKey": "Gemini API Key",
"getGroqApiKey": "Dapatkan Groq API Key",
"groqApiKey": "Groq API Key",
+ "getHuggingFaceApiKey": "Dapatkan Kunci API Hugging Face",
+ "huggingFaceApiKey": "Kunci API Hugging Face",
+ "huggingFaceModelId": "ID Model",
"getGeminiApiKey": "Dapatkan Gemini API Key",
+ "huggingFaceLoading": "Memuat...",
+ "huggingFaceModelsCount": "({{count}} model)",
+ "huggingFaceSelectModel": "Pilih model...",
+ "huggingFaceSearchModels": "Cari model...",
+ "huggingFaceNoModelsFound": "Tidak ada model ditemukan",
+ "huggingFaceProvider": "Penyedia",
+ "huggingFaceProviderAuto": "Otomatis",
+ "huggingFaceSelectProvider": "Pilih penyedia...",
+ "huggingFaceSearchProviders": "Cari penyedia...",
+ "huggingFaceNoProvidersFound": "Tidak ada penyedia ditemukan",
"openAiApiKey": "OpenAI API Key",
"apiKey": "API Key",
"openAiBaseUrl": "Base URL",
diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json
index e5cd37a110..f097002e44 100644
--- a/webview-ui/src/i18n/locales/it/settings.json
+++ b/webview-ui/src/i18n/locales/it/settings.json
@@ -259,6 +259,19 @@
"geminiApiKey": "Chiave API Gemini",
"getGroqApiKey": "Ottieni chiave API Groq",
"groqApiKey": "Chiave API Groq",
+ "getHuggingFaceApiKey": "Ottieni chiave API Hugging Face",
+ "huggingFaceApiKey": "Chiave API Hugging Face",
+ "huggingFaceModelId": "ID modello",
+ "huggingFaceLoading": "Caricamento...",
+ "huggingFaceModelsCount": "({{count}} modelli)",
+ "huggingFaceSelectModel": "Seleziona un modello...",
+ "huggingFaceSearchModels": "Cerca modelli...",
+ "huggingFaceNoModelsFound": "Nessun modello trovato",
+ "huggingFaceProvider": "Provider",
+ "huggingFaceProviderAuto": "Automatico",
+ "huggingFaceSelectProvider": "Seleziona un provider...",
+ "huggingFaceSearchProviders": "Cerca provider...",
+ "huggingFaceNoProvidersFound": "Nessun provider trovato",
"getGeminiApiKey": "Ottieni chiave API Gemini",
"openAiApiKey": "Chiave API OpenAI",
"apiKey": "Chiave API",
diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json
index e32fac776a..41ef054355 100644
--- a/webview-ui/src/i18n/locales/ja/settings.json
+++ b/webview-ui/src/i18n/locales/ja/settings.json
@@ -259,6 +259,19 @@
"geminiApiKey": "Gemini APIキー",
"getGroqApiKey": "Groq APIキーを取得",
"groqApiKey": "Groq APIキー",
+ "getHuggingFaceApiKey": "Hugging Face APIキーを取得",
+ "huggingFaceApiKey": "Hugging Face APIキー",
+ "huggingFaceModelId": "モデルID",
+ "huggingFaceLoading": "読み込み中...",
+ "huggingFaceModelsCount": "({{count}}個のモデル)",
+ "huggingFaceSelectModel": "モデルを選択...",
+ "huggingFaceSearchModels": "モデルを検索...",
+ "huggingFaceNoModelsFound": "モデルが見つかりません",
+ "huggingFaceProvider": "プロバイダー",
+ "huggingFaceProviderAuto": "自動",
+ "huggingFaceSelectProvider": "プロバイダーを選択...",
+ "huggingFaceSearchProviders": "プロバイダーを検索...",
+ "huggingFaceNoProvidersFound": "プロバイダーが見つかりません",
"getGeminiApiKey": "Gemini APIキーを取得",
"openAiApiKey": "OpenAI APIキー",
"apiKey": "APIキー",
diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json
index f48860b0ae..7ea99d7657 100644
--- a/webview-ui/src/i18n/locales/ko/settings.json
+++ b/webview-ui/src/i18n/locales/ko/settings.json
@@ -260,6 +260,19 @@
"getGroqApiKey": "Groq API 키 받기",
"groqApiKey": "Groq API 키",
"getGeminiApiKey": "Gemini API 키 받기",
+ "getHuggingFaceApiKey": "Hugging Face API 키 받기",
+ "huggingFaceApiKey": "Hugging Face API 키",
+ "huggingFaceModelId": "모델 ID",
+ "huggingFaceLoading": "로딩 중...",
+ "huggingFaceModelsCount": "({{count}}개 모델)",
+ "huggingFaceSelectModel": "모델 선택...",
+ "huggingFaceSearchModels": "모델 검색...",
+ "huggingFaceNoModelsFound": "모델을 찾을 수 없음",
+ "huggingFaceProvider": "제공자",
+ "huggingFaceProviderAuto": "자동",
+ "huggingFaceSelectProvider": "제공자 선택...",
+ "huggingFaceSearchProviders": "제공자 검색...",
+ "huggingFaceNoProvidersFound": "제공자를 찾을 수 없음",
"apiKey": "API 키",
"openAiApiKey": "OpenAI API 키",
"openAiBaseUrl": "기본 URL",
diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json
index bf6e65c995..2054e1dc19 100644
--- a/webview-ui/src/i18n/locales/nl/settings.json
+++ b/webview-ui/src/i18n/locales/nl/settings.json
@@ -260,6 +260,19 @@
"getGroqApiKey": "Groq API-sleutel ophalen",
"groqApiKey": "Groq API-sleutel",
"getGeminiApiKey": "Gemini API-sleutel ophalen",
+ "getHuggingFaceApiKey": "Hugging Face API-sleutel ophalen",
+ "huggingFaceApiKey": "Hugging Face API-sleutel",
+ "huggingFaceModelId": "Model ID",
+ "huggingFaceLoading": "Laden...",
+ "huggingFaceModelsCount": "({{count}} modellen)",
+ "huggingFaceSelectModel": "Selecteer een model...",
+ "huggingFaceSearchModels": "Zoek modellen...",
+ "huggingFaceNoModelsFound": "Geen modellen gevonden",
+ "huggingFaceProvider": "Provider",
+ "huggingFaceProviderAuto": "Automatisch",
+ "huggingFaceSelectProvider": "Selecteer een provider...",
+ "huggingFaceSearchProviders": "Zoek providers...",
+ "huggingFaceNoProvidersFound": "Geen providers gevonden",
"apiKey": "API-sleutel",
"openAiApiKey": "OpenAI API-sleutel",
"openAiBaseUrl": "Basis-URL",
diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json
index d42e4f51a9..de4ddf40a5 100644
--- a/webview-ui/src/i18n/locales/pl/settings.json
+++ b/webview-ui/src/i18n/locales/pl/settings.json
@@ -260,6 +260,19 @@
"getGroqApiKey": "Uzyskaj klucz API Groq",
"groqApiKey": "Klucz API Groq",
"getGeminiApiKey": "Uzyskaj klucz API Gemini",
+ "getHuggingFaceApiKey": "Uzyskaj klucz API Hugging Face",
+ "huggingFaceApiKey": "Klucz API Hugging Face",
+ "huggingFaceModelId": "ID modelu",
+ "huggingFaceLoading": "Ładowanie...",
+ "huggingFaceModelsCount": "({{count}} modeli)",
+ "huggingFaceSelectModel": "Wybierz model...",
+ "huggingFaceSearchModels": "Szukaj modeli...",
+ "huggingFaceNoModelsFound": "Nie znaleziono modeli",
+ "huggingFaceProvider": "Dostawca",
+ "huggingFaceProviderAuto": "Automatyczny",
+ "huggingFaceSelectProvider": "Wybierz dostawcę...",
+ "huggingFaceSearchProviders": "Szukaj dostawców...",
+ "huggingFaceNoProvidersFound": "Nie znaleziono dostawców",
"apiKey": "Klucz API",
"openAiApiKey": "Klucz API OpenAI",
"openAiBaseUrl": "URL bazowy",
diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json
index 924542cf09..fbe2119ff5 100644
--- a/webview-ui/src/i18n/locales/pt-BR/settings.json
+++ b/webview-ui/src/i18n/locales/pt-BR/settings.json
@@ -260,6 +260,19 @@
"getGroqApiKey": "Obter chave de API Groq",
"groqApiKey": "Chave de API Groq",
"getGeminiApiKey": "Obter chave de API Gemini",
+ "getHuggingFaceApiKey": "Obter chave de API Hugging Face",
+ "huggingFaceApiKey": "Chave de API Hugging Face",
+ "huggingFaceModelId": "ID do modelo",
+ "huggingFaceLoading": "Carregando...",
+ "huggingFaceModelsCount": "({{count}} modelos)",
+ "huggingFaceSelectModel": "Selecionar um modelo...",
+ "huggingFaceSearchModels": "Buscar modelos...",
+ "huggingFaceNoModelsFound": "Nenhum modelo encontrado",
+ "huggingFaceProvider": "Provedor",
+ "huggingFaceProviderAuto": "Automático",
+ "huggingFaceSelectProvider": "Selecionar um provedor...",
+ "huggingFaceSearchProviders": "Buscar provedores...",
+ "huggingFaceNoProvidersFound": "Nenhum provedor encontrado",
"apiKey": "Chave de API",
"openAiApiKey": "Chave de API OpenAI",
"openAiBaseUrl": "URL Base",
diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json
index cf719b0976..8ad7213013 100644
--- a/webview-ui/src/i18n/locales/ru/settings.json
+++ b/webview-ui/src/i18n/locales/ru/settings.json
@@ -260,6 +260,19 @@
"getGroqApiKey": "Получить Groq API-ключ",
"groqApiKey": "Groq API-ключ",
"getGeminiApiKey": "Получить Gemini API-ключ",
+ "getHuggingFaceApiKey": "Получить Hugging Face API-ключ",
+ "huggingFaceApiKey": "Hugging Face API-ключ",
+ "huggingFaceModelId": "ID модели",
+ "huggingFaceLoading": "Загрузка...",
+ "huggingFaceModelsCount": "({{count}} моделей)",
+ "huggingFaceSelectModel": "Выберите модель...",
+ "huggingFaceSearchModels": "Поиск моделей...",
+ "huggingFaceNoModelsFound": "Модели не найдены",
+ "huggingFaceProvider": "Провайдер",
+ "huggingFaceProviderAuto": "Автоматически",
+ "huggingFaceSelectProvider": "Выберите провайдера...",
+ "huggingFaceSearchProviders": "Поиск провайдеров...",
+ "huggingFaceNoProvidersFound": "Провайдеры не найдены",
"apiKey": "API-ключ",
"openAiApiKey": "OpenAI API-ключ",
"openAiBaseUrl": "Базовый URL",
diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json
index fc8fc9c677..f1d1a271b6 100644
--- a/webview-ui/src/i18n/locales/tr/settings.json
+++ b/webview-ui/src/i18n/locales/tr/settings.json
@@ -259,6 +259,19 @@
"geminiApiKey": "Gemini API Anahtarı",
"getGroqApiKey": "Groq API Anahtarı Al",
"groqApiKey": "Groq API Anahtarı",
+ "getHuggingFaceApiKey": "Hugging Face API Anahtarı Al",
+ "huggingFaceApiKey": "Hugging Face API Anahtarı",
+ "huggingFaceModelId": "Model ID",
+ "huggingFaceLoading": "Yükleniyor...",
+ "huggingFaceModelsCount": "({{count}} model)",
+ "huggingFaceSelectModel": "Bir model seç...",
+ "huggingFaceSearchModels": "Modelleri ara...",
+ "huggingFaceNoModelsFound": "Model bulunamadı",
+ "huggingFaceProvider": "Sağlayıcı",
+ "huggingFaceProviderAuto": "Otomatik",
+ "huggingFaceSelectProvider": "Bir sağlayıcı seç...",
+ "huggingFaceSearchProviders": "Sağlayıcıları ara...",
+ "huggingFaceNoProvidersFound": "Sağlayıcı bulunamadı",
"getGeminiApiKey": "Gemini API Anahtarı Al",
"openAiApiKey": "OpenAI API Anahtarı",
"apiKey": "API Anahtarı",
diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json
index 7d3e2803ad..0a46257bd8 100644
--- a/webview-ui/src/i18n/locales/vi/settings.json
+++ b/webview-ui/src/i18n/locales/vi/settings.json
@@ -259,6 +259,19 @@
"geminiApiKey": "Khóa API Gemini",
"getGroqApiKey": "Lấy khóa API Groq",
"groqApiKey": "Khóa API Groq",
+ "getHuggingFaceApiKey": "Lấy Khóa API Hugging Face",
+ "huggingFaceApiKey": "Khóa API Hugging Face",
+ "huggingFaceModelId": "ID Mô hình",
+ "huggingFaceLoading": "Đang tải...",
+ "huggingFaceModelsCount": "({{count}} mô hình)",
+ "huggingFaceSelectModel": "Chọn một mô hình...",
+ "huggingFaceSearchModels": "Tìm kiếm mô hình...",
+ "huggingFaceNoModelsFound": "Không tìm thấy mô hình",
+ "huggingFaceProvider": "Nhà cung cấp",
+ "huggingFaceProviderAuto": "Tự động",
+ "huggingFaceSelectProvider": "Chọn một nhà cung cấp...",
+ "huggingFaceSearchProviders": "Tìm kiếm nhà cung cấp...",
+ "huggingFaceNoProvidersFound": "Không tìm thấy nhà cung cấp",
"getGeminiApiKey": "Lấy khóa API Gemini",
"openAiApiKey": "Khóa API OpenAI",
"apiKey": "Khóa API",
diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json
index eae71ac706..152c771545 100644
--- a/webview-ui/src/i18n/locales/zh-CN/settings.json
+++ b/webview-ui/src/i18n/locales/zh-CN/settings.json
@@ -259,6 +259,19 @@
"geminiApiKey": "Gemini API 密钥",
"getGroqApiKey": "获取 Groq API 密钥",
"groqApiKey": "Groq API 密钥",
+ "getHuggingFaceApiKey": "获取 Hugging Face API 密钥",
+ "huggingFaceApiKey": "Hugging Face API 密钥",
+ "huggingFaceModelId": "模型 ID",
+ "huggingFaceLoading": "加载中...",
+ "huggingFaceModelsCount": "({{count}} 个模型)",
+ "huggingFaceSelectModel": "选择模型...",
+ "huggingFaceSearchModels": "搜索模型...",
+ "huggingFaceNoModelsFound": "未找到模型",
+ "huggingFaceProvider": "提供商",
+ "huggingFaceProviderAuto": "自动",
+ "huggingFaceSelectProvider": "选择提供商...",
+ "huggingFaceSearchProviders": "搜索提供商...",
+ "huggingFaceNoProvidersFound": "未找到提供商",
"getGeminiApiKey": "获取 Gemini API 密钥",
"openAiApiKey": "OpenAI API 密钥",
"apiKey": "API 密钥",
diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json
index 420ece916e..da54ad63d6 100644
--- a/webview-ui/src/i18n/locales/zh-TW/settings.json
+++ b/webview-ui/src/i18n/locales/zh-TW/settings.json
@@ -259,6 +259,19 @@
"geminiApiKey": "Gemini API 金鑰",
"getGroqApiKey": "取得 Groq API 金鑰",
"groqApiKey": "Groq API 金鑰",
+ "getHuggingFaceApiKey": "取得 Hugging Face API 金鑰",
+ "huggingFaceApiKey": "Hugging Face API 金鑰",
+ "huggingFaceModelId": "模型 ID",
+ "huggingFaceLoading": "載入中...",
+ "huggingFaceModelsCount": "({{count}} 個模型)",
+ "huggingFaceSelectModel": "選擇模型...",
+ "huggingFaceSearchModels": "搜尋模型...",
+ "huggingFaceNoModelsFound": "找不到模型",
+ "huggingFaceProvider": "提供者",
+ "huggingFaceProviderAuto": "自動",
+ "huggingFaceSelectProvider": "選擇提供者...",
+ "huggingFaceSearchProviders": "搜尋提供者...",
+ "huggingFaceNoProvidersFound": "找不到提供者",
"getGeminiApiKey": "取得 Gemini API 金鑰",
"openAiApiKey": "OpenAI API 金鑰",
"apiKey": "API 金鑰",