From 2b8cdb7f11cbcdac1fe410c039ee97186c4031e9 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Tue, 26 Aug 2025 19:46:19 +0000 Subject: [PATCH 1/4] feat: add Ollama API key support for Turbo mode - Add ollamaApiKey field to ProviderSettings schema - Add ollamaApiKey to SECRET_STATE_KEYS for secure storage - Update Ollama and NativeOllama providers to use API key for authentication - Add UI field for Ollama API key (shown when custom base URL is provided) - Add test coverage for API key functionality This enables users to use Ollama Turbo with datacenter-grade hardware by providing an API key for authenticated Ollama instances or cloud services. --- packages/types/src/global-settings.ts | 1 + packages/types/src/provider-settings.ts | 1 + src/api/providers/__tests__/ollama.spec.ts | 11 +++++++++++ src/api/providers/native-ollama.ts | 13 +++++++++++-- src/api/providers/ollama.ts | 12 +++++++++++- .../src/components/settings/providers/Ollama.tsx | 10 ++++++++++ 6 files changed, 45 insertions(+), 3 deletions(-) diff --git a/packages/types/src/global-settings.ts b/packages/types/src/global-settings.ts index dd72d72fe9..cc7cbfa0eb 100644 --- a/packages/types/src/global-settings.ts +++ b/packages/types/src/global-settings.ts @@ -174,6 +174,7 @@ export const SECRET_STATE_KEYS = [ "awsSecretKey", "awsSessionToken", "openAiApiKey", + "ollamaApiKey", "geminiApiKey", "openAiNativeApiKey", "cerebrasApiKey", diff --git a/packages/types/src/provider-settings.ts b/packages/types/src/provider-settings.ts index 4f5ca9c3ca..981d61552a 100644 --- a/packages/types/src/provider-settings.ts +++ b/packages/types/src/provider-settings.ts @@ -186,6 +186,7 @@ const openAiSchema = baseProviderSettingsSchema.extend({ const ollamaSchema = baseProviderSettingsSchema.extend({ ollamaModelId: z.string().optional(), ollamaBaseUrl: z.string().optional(), + ollamaApiKey: z.string().optional(), }) const vsCodeLmSchema = baseProviderSettingsSchema.extend({ diff --git a/src/api/providers/__tests__/ollama.spec.ts b/src/api/providers/__tests__/ollama.spec.ts index fa98a56e8d..bbd43d3b45 100644 --- a/src/api/providers/__tests__/ollama.spec.ts +++ b/src/api/providers/__tests__/ollama.spec.ts @@ -92,6 +92,17 @@ describe("OllamaHandler", () => { }) expect(handlerWithoutUrl).toBeInstanceOf(OllamaHandler) }) + + it("should use API key when provided", () => { + const handlerWithApiKey = new OllamaHandler({ + apiModelId: "llama2", + ollamaModelId: "llama2", + ollamaBaseUrl: "https://ollama.com", + ollamaApiKey: "test-api-key", + }) + expect(handlerWithApiKey).toBeInstanceOf(OllamaHandler) + // The API key will be used in the Authorization header + }) }) describe("createMessage", () => { diff --git a/src/api/providers/native-ollama.ts b/src/api/providers/native-ollama.ts index 8ab4ebe2e1..dc6ca47954 100644 --- a/src/api/providers/native-ollama.ts +++ b/src/api/providers/native-ollama.ts @@ -140,10 +140,19 @@ export class NativeOllamaHandler extends BaseProvider implements SingleCompletio private ensureClient(): Ollama { if (!this.client) { try { - this.client = new Ollama({ + const clientOptions: any = { host: this.options.ollamaBaseUrl || "http://localhost:11434", // Note: The ollama npm package handles timeouts internally - }) + } + + // Add API key if provided (for Ollama cloud or authenticated instances) + if (this.options.ollamaApiKey) { + clientOptions.headers = { + Authorization: `Bearer ${this.options.ollamaApiKey}`, + } + } + + this.client = new Ollama(clientOptions) } catch (error: any) { throw new Error(`Error creating Ollama client: ${error.message}`) } diff --git a/src/api/providers/ollama.ts b/src/api/providers/ollama.ts index 54666be58d..75895908e9 100644 --- a/src/api/providers/ollama.ts +++ b/src/api/providers/ollama.ts @@ -25,10 +25,20 @@ export class OllamaHandler extends BaseProvider implements SingleCompletionHandl super() this.options = options + // Use the API key if provided (for Ollama cloud or authenticated instances) + // Otherwise use "ollama" as a placeholder for local instances + const apiKey = this.options.ollamaApiKey || "ollama" + + const headers: Record = {} + if (this.options.ollamaApiKey) { + headers["Authorization"] = `Bearer ${this.options.ollamaApiKey}` + } + this.client = new OpenAI({ baseURL: (this.options.ollamaBaseUrl || "http://localhost:11434") + "/v1", - apiKey: "ollama", + apiKey: apiKey, timeout: getApiRequestTimeout(), + defaultHeaders: headers, }) } diff --git a/webview-ui/src/components/settings/providers/Ollama.tsx b/webview-ui/src/components/settings/providers/Ollama.tsx index 263c3892f2..7be2383a92 100644 --- a/webview-ui/src/components/settings/providers/Ollama.tsx +++ b/webview-ui/src/components/settings/providers/Ollama.tsx @@ -11,6 +11,7 @@ import { useRouterModels } from "@src/components/ui/hooks/useRouterModels" import { vscode } from "@src/utils/vscode" import { inputEventTransform } from "../transforms" +import { ApiKeyField } from "../common/ApiKeyField" type OllamaProps = { apiConfiguration: ProviderSettings @@ -86,6 +87,15 @@ export const Ollama = ({ apiConfiguration, setApiConfigurationField }: OllamaPro className="w-full"> + {apiConfiguration?.ollamaBaseUrl && ( + setApiConfigurationField("ollamaApiKey", value)} + providerName="Ollama" + placeholder={t("settings:placeholders.apiKey.ollama")} + helpText={t("settings:providers.ollama.apiKeyHelp")} + /> + )} Date: Tue, 26 Aug 2025 19:48:24 +0000 Subject: [PATCH 2/4] fix: use VSCodeTextField for Ollama API key field Remove non-existent ApiKeyField import and use standard VSCodeTextField with password type, matching other provider implementations --- .../components/settings/providers/Ollama.tsx | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/webview-ui/src/components/settings/providers/Ollama.tsx b/webview-ui/src/components/settings/providers/Ollama.tsx index 7be2383a92..b09ecad5d6 100644 --- a/webview-ui/src/components/settings/providers/Ollama.tsx +++ b/webview-ui/src/components/settings/providers/Ollama.tsx @@ -11,7 +11,6 @@ import { useRouterModels } from "@src/components/ui/hooks/useRouterModels" import { vscode } from "@src/utils/vscode" import { inputEventTransform } from "../transforms" -import { ApiKeyField } from "../common/ApiKeyField" type OllamaProps = { apiConfiguration: ProviderSettings @@ -88,13 +87,17 @@ export const Ollama = ({ apiConfiguration, setApiConfigurationField }: OllamaPro {apiConfiguration?.ollamaBaseUrl && ( - setApiConfigurationField("ollamaApiKey", value)} - providerName="Ollama" - placeholder={t("settings:placeholders.apiKey.ollama")} - helpText={t("settings:providers.ollama.apiKeyHelp")} - /> + + +
+ {t("settings:providers.ollama.apiKeyHelp")} +
+
)} Date: Sat, 30 Aug 2025 16:42:46 -0600 Subject: [PATCH 3/4] Add missing translation keys for Ollama API key support - Add providers.ollama.apiKey and providers.ollama.apiKeyHelp to all 18 language files - Support for authenticated Ollama instances and cloud services - Relates to PR #7425 --- webview-ui/src/i18n/locales/ca/settings.json | 2 ++ webview-ui/src/i18n/locales/de/settings.json | 2 ++ webview-ui/src/i18n/locales/en/settings.json | 2 ++ webview-ui/src/i18n/locales/es/settings.json | 2 ++ webview-ui/src/i18n/locales/fr/settings.json | 2 ++ webview-ui/src/i18n/locales/hi/settings.json | 2 ++ webview-ui/src/i18n/locales/id/settings.json | 2 ++ webview-ui/src/i18n/locales/it/settings.json | 2 ++ webview-ui/src/i18n/locales/ja/settings.json | 2 ++ webview-ui/src/i18n/locales/ko/settings.json | 2 ++ webview-ui/src/i18n/locales/nl/settings.json | 2 ++ webview-ui/src/i18n/locales/pl/settings.json | 2 ++ webview-ui/src/i18n/locales/pt-BR/settings.json | 2 ++ webview-ui/src/i18n/locales/ru/settings.json | 2 ++ webview-ui/src/i18n/locales/tr/settings.json | 2 ++ webview-ui/src/i18n/locales/vi/settings.json | 2 ++ webview-ui/src/i18n/locales/zh-CN/settings.json | 2 ++ webview-ui/src/i18n/locales/zh-TW/settings.json | 2 ++ 18 files changed, 36 insertions(+) diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index 977ccaeec9..20948d71bb 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -368,6 +368,8 @@ "ollama": { "baseUrl": "URL base (opcional)", "modelId": "ID del model", + "apiKey": "Clau API d'Ollama", + "apiKeyHelp": "Clau API opcional per a instàncies d'Ollama autenticades o serveis al núvol. Deixa-ho buit per a instal·lacions locals.", "description": "Ollama permet executar models localment al vostre ordinador. Per a instruccions sobre com començar, consulteu la Guia d'inici ràpid.", "warning": "Nota: Roo Code utilitza prompts complexos i funciona millor amb models Claude. Els models menys capaços poden no funcionar com s'espera." }, diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index 71006a9d4c..3f6d8b6e77 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -368,6 +368,8 @@ "ollama": { "baseUrl": "Basis-URL (optional)", "modelId": "Modell-ID", + "apiKey": "Ollama API-Schlüssel", + "apiKeyHelp": "Optionaler API-Schlüssel für authentifizierte Ollama-Instanzen oder Cloud-Services. Leer lassen für lokale Installationen.", "description": "Ollama ermöglicht es dir, Modelle lokal auf deinem Computer auszuführen. Eine Anleitung zum Einstieg findest du im Schnellstart-Guide.", "warning": "Hinweis: Roo Code verwendet komplexe Prompts und funktioniert am besten mit Claude-Modellen. Weniger leistungsfähige Modelle funktionieren möglicherweise nicht wie erwartet." }, diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index 6d761e85ff..a36f8cbfc2 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -367,6 +367,8 @@ "ollama": { "baseUrl": "Base URL (optional)", "modelId": "Model ID", + "apiKey": "Ollama API Key", + "apiKeyHelp": "Optional API key for authenticated Ollama instances or cloud services. Leave empty for local installations.", "description": "Ollama allows you to run models locally on your computer. For instructions on how to get started, see their quickstart guide.", "warning": "Note: Roo Code uses complex prompts and works best with Claude models. Less capable models may not work as expected." }, diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index a3dbfa410c..c3e235a317 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -368,6 +368,8 @@ "ollama": { "baseUrl": "URL base (opcional)", "modelId": "ID del modelo", + "apiKey": "Clave API de Ollama", + "apiKeyHelp": "Clave API opcional para instancias de Ollama autenticadas o servicios en la nube. Deja vacío para instalaciones locales.", "description": "Ollama le permite ejecutar modelos localmente en su computadora. Para obtener instrucciones sobre cómo comenzar, consulte la guía de inicio rápido.", "warning": "Nota: Roo Code utiliza prompts complejos y funciona mejor con modelos Claude. Los modelos menos capaces pueden no funcionar como se espera." }, diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index a2c2d0ca06..ca53d788c7 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -368,6 +368,8 @@ "ollama": { "baseUrl": "URL de base (optionnel)", "modelId": "ID du modèle", + "apiKey": "Clé API Ollama", + "apiKeyHelp": "Clé API optionnelle pour les instances Ollama authentifiées ou les services cloud. Laissez vide pour les installations locales.", "description": "Ollama vous permet d'exécuter des modèles localement sur votre ordinateur. Pour obtenir des instructions sur la mise en route, consultez le guide de démarrage rapide.", "warning": "Remarque : Roo Code utilise des prompts complexes et fonctionne mieux avec les modèles Claude. Les modèles moins performants peuvent ne pas fonctionner comme prévu." }, diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index 000b5f89b3..3660d7fb3e 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -368,6 +368,8 @@ "ollama": { "baseUrl": "बेस URL (वैकल्पिक)", "modelId": "मॉडल ID", + "apiKey": "Ollama API Key", + "apiKeyHelp": "प्रमाणित Ollama इंस्टेंसेस या क्लाउड सेवाओं के लिए वैकल्पिक API key। स्थानीय इंस्टॉलेशन के लिए खाली छोड़ें।", "description": "Ollama आपको अपने कंप्यूटर पर स्थानीय रूप से मॉडल चलाने की अनुमति देता है। आरंभ करने के निर्देशों के लिए, उनकी क्विकस्टार्ट गाइड देखें।", "warning": "नोट: Roo Code जटिल प्रॉम्प्ट्स का उपयोग करता है और Claude मॉडल के साथ सबसे अच्छा काम करता है। कम क्षमता वाले मॉडल अपेक्षित रूप से काम नहीं कर सकते हैं।" }, diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json index 0af73ecda9..5596f79570 100644 --- a/webview-ui/src/i18n/locales/id/settings.json +++ b/webview-ui/src/i18n/locales/id/settings.json @@ -372,6 +372,8 @@ "ollama": { "baseUrl": "Base URL (opsional)", "modelId": "Model ID", + "apiKey": "Ollama API Key", + "apiKeyHelp": "API key opsional untuk instance Ollama yang terautentikasi atau layanan cloud. Biarkan kosong untuk instalasi lokal.", "description": "Ollama memungkinkan kamu menjalankan model secara lokal di komputer. Untuk instruksi cara memulai, lihat panduan quickstart mereka.", "warning": "Catatan: Roo Code menggunakan prompt kompleks dan bekerja terbaik dengan model Claude. Model yang kurang mampu mungkin tidak bekerja seperti yang diharapkan." }, diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index 0cc2a59019..5dc80e765b 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -368,6 +368,8 @@ "ollama": { "baseUrl": "URL base (opzionale)", "modelId": "ID modello", + "apiKey": "Chiave API Ollama", + "apiKeyHelp": "Chiave API opzionale per istanze Ollama autenticate o servizi cloud. Lascia vuoto per installazioni locali.", "description": "Ollama ti permette di eseguire modelli localmente sul tuo computer. Per iniziare, consulta la guida rapida.", "warning": "Nota: Roo Code utilizza prompt complessi e funziona meglio con i modelli Claude. I modelli con capacità inferiori potrebbero non funzionare come previsto." }, diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index 27b51854dd..9b4ccb22fe 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -368,6 +368,8 @@ "ollama": { "baseUrl": "ベースURL(オプション)", "modelId": "モデルID", + "apiKey": "Ollama APIキー", + "apiKeyHelp": "認証されたOllamaインスタンスやクラウドサービス用のオプションAPIキー。ローカルインストールの場合は空のままにしてください。", "description": "Ollamaを使用すると、ローカルコンピューターでモデルを実行できます。始め方については、クイックスタートガイドをご覧ください。", "warning": "注意:Roo Codeは複雑なプロンプトを使用し、Claudeモデルで最適に動作します。能力の低いモデルは期待通りに動作しない場合があります。" }, diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index e6125f0ca8..4073afcb7f 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -368,6 +368,8 @@ "ollama": { "baseUrl": "기본 URL (선택사항)", "modelId": "모델 ID", + "apiKey": "Ollama API 키", + "apiKeyHelp": "인증된 Ollama 인스턴스나 클라우드 서비스용 선택적 API 키. 로컬 설치의 경우 비워두세요.", "description": "Ollama를 사용하면 컴퓨터에서 로컬로 모델을 실행할 수 있습니다. 시작하는 방법은 빠른 시작 가이드를 참조하세요.", "warning": "참고: Roo Code는 복잡한 프롬프트를 사용하며 Claude 모델에서 가장 잘 작동합니다. 덜 강력한 모델은 예상대로 작동하지 않을 수 있습니다." }, diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json index ca2024522e..87793ee43e 100644 --- a/webview-ui/src/i18n/locales/nl/settings.json +++ b/webview-ui/src/i18n/locales/nl/settings.json @@ -368,6 +368,8 @@ "ollama": { "baseUrl": "Basis-URL (optioneel)", "modelId": "Model-ID", + "apiKey": "Ollama API-sleutel", + "apiKeyHelp": "Optionele API-sleutel voor geauthenticeerde Ollama-instanties of cloudservices. Laat leeg voor lokale installaties.", "description": "Ollama laat je modellen lokaal op je computer draaien. Zie hun quickstart-gids voor instructies.", "warning": "Let op: Roo Code gebruikt complexe prompts en werkt het beste met Claude-modellen. Minder krachtige modellen werken mogelijk niet zoals verwacht." }, diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index 25b04078bb..f274f29c57 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -368,6 +368,8 @@ "ollama": { "baseUrl": "URL bazowy (opcjonalnie)", "modelId": "ID modelu", + "apiKey": "Klucz API Ollama", + "apiKeyHelp": "Opcjonalny klucz API dla uwierzytelnionych instancji Ollama lub usług chmurowych. Pozostaw puste dla instalacji lokalnych.", "description": "Ollama pozwala na lokalne uruchamianie modeli na twoim komputerze. Aby rozpocząć, zapoznaj się z przewodnikiem szybkiego startu.", "warning": "Uwaga: Roo Code używa złożonych podpowiedzi i działa najlepiej z modelami Claude. Modele o niższych możliwościach mogą nie działać zgodnie z oczekiwaniami." }, diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index 7039497b94..47b2470d67 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -368,6 +368,8 @@ "ollama": { "baseUrl": "URL Base (opcional)", "modelId": "ID do Modelo", + "apiKey": "Chave API Ollama", + "apiKeyHelp": "Chave API opcional para instâncias Ollama autenticadas ou serviços em nuvem. Deixe vazio para instalações locais.", "description": "O Ollama permite que você execute modelos localmente em seu computador. Para instruções sobre como começar, veja o guia de início rápido deles.", "warning": "Nota: O Roo Code usa prompts complexos e funciona melhor com modelos Claude. Modelos menos capazes podem não funcionar como esperado." }, diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json index 05d73cd46f..324a4a55c4 100644 --- a/webview-ui/src/i18n/locales/ru/settings.json +++ b/webview-ui/src/i18n/locales/ru/settings.json @@ -368,6 +368,8 @@ "ollama": { "baseUrl": "Базовый URL (опционально)", "modelId": "ID модели", + "apiKey": "API-ключ Ollama", + "apiKeyHelp": "Опциональный API-ключ для аутентифицированных экземпляров Ollama или облачных сервисов. Оставьте пустым для локальных установок.", "description": "Ollama позволяет запускать модели локально на вашем компьютере. Для начала ознакомьтесь с кратким руководством.", "warning": "Примечание: Roo Code использует сложные подсказки и лучше всего работает с моделями Claude. Менее мощные модели могут работать некорректно." }, diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index 1bcaa7def5..489d579447 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -368,6 +368,8 @@ "ollama": { "baseUrl": "Temel URL (İsteğe bağlı)", "modelId": "Model Kimliği", + "apiKey": "Ollama API Anahtarı", + "apiKeyHelp": "Kimlik doğrulamalı Ollama örnekleri veya bulut hizmetleri için isteğe bağlı API anahtarı. Yerel kurulumlar için boş bırakın.", "description": "Ollama, modelleri bilgisayarınızda yerel olarak çalıştırmanıza olanak tanır. Başlamak için hızlı başlangıç kılavuzlarına bakın.", "warning": "Not: Roo Code karmaşık istemler kullanır ve Claude modelleriyle en iyi şekilde çalışır. Daha az yetenekli modeller beklendiği gibi çalışmayabilir." }, diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index b8cbb8c571..f41ed16c82 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -368,6 +368,8 @@ "ollama": { "baseUrl": "URL cơ sở (tùy chọn)", "modelId": "ID mô hình", + "apiKey": "Khóa API Ollama", + "apiKeyHelp": "Khóa API tùy chọn cho các phiên bản Ollama đã xác thực hoặc dịch vụ đám mây. Để trống cho cài đặt cục bộ.", "description": "Ollama cho phép bạn chạy các mô hình cục bộ trên máy tính của bạn. Để biết hướng dẫn về cách bắt đầu, xem hướng dẫn nhanh của họ.", "warning": "Lưu ý: Roo Code sử dụng các lời nhắc phức tạp và hoạt động tốt nhất với các mô hình Claude. Các mô hình kém mạnh hơn có thể không hoạt động như mong đợi." }, diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index a7d3077684..ba6246004a 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -368,6 +368,8 @@ "ollama": { "baseUrl": "基础 URL(可选)", "modelId": "模型 ID", + "apiKey": "Ollama API 密钥", + "apiKeyHelp": "用于已认证 Ollama 实例或云服务的可选 API 密钥。本地安装请留空。", "description": "Ollama 允许您在本地计算机上运行模型。有关如何开始使用的说明,请参阅其快速入门指南。", "warning": "注意:Roo Code 使用复杂的提示,与 Claude 模型配合最佳。功能较弱的模型可能无法按预期工作。" }, diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index d8b71601dc..e8e407550a 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -368,6 +368,8 @@ "ollama": { "baseUrl": "基礎 URL(選用)", "modelId": "模型 ID", + "apiKey": "Ollama API 金鑰", + "apiKeyHelp": "用於已認證 Ollama 執行個體或雲端服務的選用 API 金鑰。本機安裝請留空。", "description": "Ollama 允許您在本機電腦執行模型。請參閱快速入門指南。", "warning": "注意:Roo Code 使用複雜提示,與 Claude 模型搭配最佳。功能較弱的模型可能無法正常運作。" }, From 00628f8901e6f3a065186ece45acdcb7f5bfe4b3 Mon Sep 17 00:00:00 2001 From: Daniel Riccio Date: Sat, 30 Aug 2025 17:06:01 -0600 Subject: [PATCH 4/4] refactor: improve type safety for Ollama client configuration - Replace 'any' type with proper OllamaOptions (Config) type - Import Config type from ollama package for better type checking --- src/api/providers/native-ollama.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/api/providers/native-ollama.ts b/src/api/providers/native-ollama.ts index dc6ca47954..06c1c33d23 100644 --- a/src/api/providers/native-ollama.ts +++ b/src/api/providers/native-ollama.ts @@ -1,5 +1,5 @@ import { Anthropic } from "@anthropic-ai/sdk" -import { Message, Ollama } from "ollama" +import { Message, Ollama, type Config as OllamaOptions } from "ollama" import { ModelInfo, openAiModelInfoSaneDefaults, DEEP_SEEK_DEFAULT_TEMPERATURE } from "@roo-code/types" import { ApiStream } from "../transform/stream" import { BaseProvider } from "./base-provider" @@ -140,7 +140,7 @@ export class NativeOllamaHandler extends BaseProvider implements SingleCompletio private ensureClient(): Ollama { if (!this.client) { try { - const clientOptions: any = { + const clientOptions: OllamaOptions = { host: this.options.ollamaBaseUrl || "http://localhost:11434", // Note: The ollama npm package handles timeouts internally }