From cc2420ea1a1b9c74fac452b116f0b76937bedad8 Mon Sep 17 00:00:00 2001 From: teddyOOXX <121077180+teddyOOXX@users.noreply.github.com> Date: Mon, 24 Mar 2025 22:14:44 +0800 Subject: [PATCH] fix qwq model in openai provider (#1940) * feat: Add the openAiR1FormatEnabled field to enable this switch in OpenAI compatible mode to support the current QWQ and future additional classes of R1 models. * feat: Add the openAiR1FormatEnabled field to enable this switch in OpenAI compatible mode to support the current QWQ and future additional classes of R1 models. * fix: add miss i18n * fix: add miss i18n * fix: remove the redundant call --------- Co-authored-by: xiong --- .changeset/nine-ways-worry.md | 5 + src/api/providers/openai.ts | 5 +- src/core/webview/ClineProvider.ts | 1 - src/exports/roo-code.d.ts | 1 + src/shared/api.ts | 2 + src/shared/globalState.ts | 1 + .../src/components/settings/ApiOptions.tsx | 6 +- .../components/settings/R1FormatSetting.tsx | 25 ++ .../src/components/settings/SettingsView.tsx | 2 - webview-ui/src/i18n/locales/ca/settings.json | 10 +- 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/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/pl/settings.json | 2 + .../src/i18n/locales/pt-BR/settings.json | 2 + webview-ui/src/i18n/locales/tr/settings.json | 2 + webview-ui/src/i18n/locales/vi/settings.json | 2 + .../src/i18n/locales/zh-CN/settings.json | 2 + .../src/i18n/locales/zh-TW/settings.json | 334 +++++++++--------- 24 files changed, 241 insertions(+), 177 deletions(-) create mode 100644 .changeset/nine-ways-worry.md create mode 100644 webview-ui/src/components/settings/R1FormatSetting.tsx diff --git a/.changeset/nine-ways-worry.md b/.changeset/nine-ways-worry.md new file mode 100644 index 0000000000..df1c0a8687 --- /dev/null +++ b/.changeset/nine-ways-worry.md @@ -0,0 +1,5 @@ +--- +"roo-cline": patch +--- + +Add the openAiR1FormatEnabled field to enable this switch in OpenAI compatible mode to support the current QWQ and future additional classes of R1 models. diff --git a/src/api/providers/openai.ts b/src/api/providers/openai.ts index 6b82f708c9..bc57591c01 100644 --- a/src/api/providers/openai.ts +++ b/src/api/providers/openai.ts @@ -63,10 +63,9 @@ export class OpenAiHandler extends BaseProvider implements SingleCompletionHandl const modelInfo = this.getModel().info const modelUrl = this.options.openAiBaseUrl ?? "" const modelId = this.options.openAiModelId ?? "" - - const deepseekReasoner = modelId.includes("deepseek-reasoner") + const enabledR1Format = this.options.openAiR1FormatEnabled ?? false + const deepseekReasoner = modelId.includes("deepseek-reasoner") || enabledR1Format const ark = modelUrl.includes(".volces.com") - if (modelId.startsWith("o3-mini")) { yield* this.handleO3FamilyMessage(modelId, systemPrompt, messages) return diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index 3d37c07fc8..637e581a47 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -2142,7 +2142,6 @@ export class ClineProvider extends EventEmitter implements await this.configManager.setModeConfig(mode, config.id) } } - await this.contextProxy.setApiConfiguration(apiConfiguration) if (this.getCurrentCline()) { diff --git a/src/exports/roo-code.d.ts b/src/exports/roo-code.d.ts index 886290d3d1..62a5084fc0 100644 --- a/src/exports/roo-code.d.ts +++ b/src/exports/roo-code.d.ts @@ -200,6 +200,7 @@ export type GlobalStateKey = | "modelMaxThinkingTokens" | "azureApiVersion" | "openAiStreamingEnabled" + | "openAiR1FormatEnabled" | "openRouterModelId" | "openRouterModelInfo" | "openRouterBaseUrl" diff --git a/src/shared/api.ts b/src/shared/api.ts index ab672c6a11..a4eb382ef7 100644 --- a/src/shared/api.ts +++ b/src/shared/api.ts @@ -48,6 +48,7 @@ export interface ApiHandlerOptions { vertexRegion?: string openAiBaseUrl?: string openAiApiKey?: string + openAiR1FormatEnabled?: boolean openAiModelId?: string openAiCustomModelInfo?: ModelInfo openAiUseAzure?: boolean @@ -127,6 +128,7 @@ export const API_CONFIG_KEYS: GlobalStateKey[] = [ "azureApiVersion", "openRouterUseMiddleOutTransform", "openAiStreamingEnabled", + "openAiR1FormatEnabled", // "deepSeekBaseUrl", // not exist on GlobalStateKey // "includeMaxTokens", // not exist on GlobalStateKey "unboundModelId", diff --git a/src/shared/globalState.ts b/src/shared/globalState.ts index 5896bee9cd..5513fe7134 100644 --- a/src/shared/globalState.ts +++ b/src/shared/globalState.ts @@ -68,6 +68,7 @@ export const GLOBAL_STATE_KEYS = [ "modelMaxThinkingTokens", "azureApiVersion", "openAiStreamingEnabled", + "openAiR1FormatEnabled", "openRouterModelId", "openRouterModelInfo", "openRouterBaseUrl", diff --git a/webview-ui/src/components/settings/ApiOptions.tsx b/webview-ui/src/components/settings/ApiOptions.tsx index f3e0f7822e..7cbd00f0a4 100644 --- a/webview-ui/src/components/settings/ApiOptions.tsx +++ b/webview-ui/src/components/settings/ApiOptions.tsx @@ -55,6 +55,7 @@ import { TemperatureControl } from "./TemperatureControl" import { validateApiConfiguration, validateModelId, validateBedrockArn } from "@/utils/validate" import { ApiErrorMessage } from "./ApiErrorMessage" import { ThinkingBudget } from "./ThinkingBudget" +import { R1FormatSetting } from "./R1FormatSetting" interface ApiOptionsProps { uriScheme: string | undefined @@ -104,7 +105,6 @@ const ApiOptions = ({ !!apiConfiguration?.googleGeminiBaseUrl, ) const [isDescriptionExpanded, setIsDescriptionExpanded] = useState(false) - const noTransform = (value: T) => value const inputEventTransform = (event: E) => (event as { target: HTMLInputElement })?.target?.value as any @@ -696,6 +696,10 @@ const ApiOptions = ({ serviceName="OpenAI" serviceUrl="https://platform.openai.com" /> + diff --git a/webview-ui/src/components/settings/R1FormatSetting.tsx b/webview-ui/src/components/settings/R1FormatSetting.tsx new file mode 100644 index 0000000000..6418c949bd --- /dev/null +++ b/webview-ui/src/components/settings/R1FormatSetting.tsx @@ -0,0 +1,25 @@ +import { Checkbox } from "vscrui" + +import { useAppTranslation } from "@/i18n/TranslationContext" + +interface R1FormatSettingProps { + onChange: (value: boolean) => void + openAiR1FormatEnabled?: boolean +} + +export const R1FormatSetting = ({ onChange, openAiR1FormatEnabled }: R1FormatSettingProps) => { + const { t } = useAppTranslation() + + return ( +
+
+ + {t("settings:modelInfo.enableR1Format")} + +
+

+ {t("settings:modelInfo.enableR1FormatTips")} +

+
+ ) +} diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index e2a5c6f25b..79a080a65b 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -136,7 +136,6 @@ const SettingsView = forwardRef(({ onDone }, // Make sure apiConfiguration is initialized and managed by SettingsView. const apiConfiguration = useMemo(() => cachedState.apiConfiguration ?? {}, [cachedState.apiConfiguration]) - useEffect(() => { // Update only when currentApiConfigName is changed. // Expected to be triggered by loadApiConfiguration/upsertApiConfiguration. @@ -168,7 +167,6 @@ const SettingsView = forwardRef(({ onDone }, } setChangeDetected(true) - return { ...prevState, apiConfiguration: { ...prevState.apiConfiguration, [field]: value } } }) }, diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index b5d5ff2708..283bd49b4d 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -349,13 +349,15 @@ "outputPrice": "Preu de sortida", "cacheReadsPrice": "Preu de lectures de caché", "cacheWritesPrice": "Preu d'escriptures de caché", + "enableStreaming": "Habilitar streaming", + "enableR1Format": "Activar els paràmetres del model R1", + "enableR1FormatTips": "S'ha d'activat quan s'utilitzen models R1 com el QWQ per evitar errors 400", + "useAzure": "Utilitzar Azure", + "azureApiVersion": "Establir versió de l'API d'Azure", "gemini": { "freeRequests": "* Gratuït fins a {{count}} sol·licituds per minut. Després d'això, la facturació depèn de la mida del prompt.", "pricingDetails": "Per a més informació, consulteu els detalls de preus." - }, - "enableStreaming": "Habilitar streaming", - "useAzure": "Utilitzar Azure", - "azureApiVersion": "Establir versió de l'API d'Azure" + } }, "modelPicker": { "automaticFetch": "L'extensió obté automàticament la llista més recent de models disponibles a {{serviceName}}. Si no esteu segur de quin model triar, Roo Code funciona millor amb {{defaultModelId}}. També podeu cercar \"free\" per a opcions gratuïtes actualment disponibles.", diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index 05d195a093..402bcc99e6 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "Cache-Lesepreis", "cacheWritesPrice": "Cache-Schreibpreis", "enableStreaming": "Streaming aktivieren", + "enableR1Format": "R1-Modellparameter aktivieren", + "enableR1FormatTips": "Muss aktiviert werden, wenn R1-Modelle wie QWQ verwendet werden, um 400-Fehler zu vermeiden", "useAzure": "Azure verwenden", "azureApiVersion": "Azure API-Version festlegen", "gemini": { diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index 7fd923b4ee..2cf9c16326 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "Cache reads price", "cacheWritesPrice": "Cache writes price", "enableStreaming": "Enable streaming", + "enableR1Format": "Enable R1 model parameters", + "enableR1FormatTips": "Must be enabled when using R1 models such as QWQ to prevent 400 errors", "useAzure": "Use Azure", "azureApiVersion": "Set Azure API version", "gemini": { diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index 9c5ae82da9..de61e0fbd1 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "Precio de lecturas de caché", "cacheWritesPrice": "Precio de escrituras de caché", "enableStreaming": "Habilitar streaming", + "enableR1Format": "Habilitar parámetros del modelo R1", + "enableR1FormatTips": "Debe habilitarse al utilizar modelos R1 como QWQ, para evitar el error 400", "useAzure": "Usar Azure", "azureApiVersion": "Establecer versión de API de Azure", "gemini": { diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index 1553e11876..42e11c74ed 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "Prix des lectures de cache", "cacheWritesPrice": "Prix des écritures de cache", "enableStreaming": "Activer le streaming", + "enableR1Format": "Activer les paramètres du modèle R1", + "enableR1FormatTips": "Doit être activé lors de l'utilisation de modèles R1 tels que QWQ, pour éviter l'erreur 400", "useAzure": "Utiliser Azure", "azureApiVersion": "Définir la version de l'API Azure", "gemini": { diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index 26054ea70d..ebb698726a 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "कैश रीड्स मूल्य", "cacheWritesPrice": "कैश राइट्स मूल्य", "enableStreaming": "स्ट्रीमिंग सक्षम करें", + "enableR1Format": "R1 मॉडल पैरामीटर सक्षम करें", + "enableR1FormatTips": "QWQ जैसी R1 मॉडलों का उपयोग करते समय इसे सक्षम करना आवश्यक है, ताकि 400 त्रुटि से बचा जा सके", "useAzure": "Azure का उपयोग करें", "azureApiVersion": "Azure API संस्करण सेट करें", "gemini": { diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index 1e62f7bac8..f59380fffc 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "Prezzo letture cache", "cacheWritesPrice": "Prezzo scritture cache", "enableStreaming": "Abilita streaming", + "enableR1Format": "Abilita i parametri del modello R1", + "enableR1FormatTips": "Deve essere abilitato quando si utilizzano modelli R1 come QWQ, per evitare l'errore 400", "useAzure": "Usa Azure", "azureApiVersion": "Imposta versione API Azure", "gemini": { diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index 5bbbc20a6f..7673e95b26 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "キャッシュ読み取り価格", "cacheWritesPrice": "キャッシュ書き込み価格", "enableStreaming": "ストリーミングを有効化", + "enableR1Format": "R1モデルパラメータを有効にする", + "enableR1FormatTips": "QWQなどのR1モデルを使用する際には、有効にする必要があります。400エラーを防ぐために", "useAzure": "Azureを使用", "azureApiVersion": "Azure APIバージョンを設定", "gemini": { diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index 60d0e94405..3bcab956d4 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "캐시 읽기 가격", "cacheWritesPrice": "캐시 쓰기 가격", "enableStreaming": "스트리밍 활성화", + "enableR1Format": "R1 모델 매개변수 활성화", + "enableR1FormatTips": "QWQ와 같은 R1 모델을 사용할 때 활성화해야 하며, 400 오류를 방지합니다", "useAzure": "Azure 사용", "azureApiVersion": "Azure API 버전 설정", "gemini": { diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index 1e4709df3f..91f1826ce9 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "Cena odczytów bufora", "cacheWritesPrice": "Cena zapisów bufora", "enableStreaming": "Włącz strumieniowanie", + "enableR1Format": "Włącz parametry modelu R1", + "enableR1FormatTips": "Należy włączyć podczas korzystania z modeli R1, takich jak QWQ, aby uniknąć błędu 400", "useAzure": "Użyj Azure", "azureApiVersion": "Ustaw wersję API Azure", "gemini": { diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index db3f745830..d06c69ecb9 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "Preço de leituras de cache", "cacheWritesPrice": "Preço de escritas de cache", "enableStreaming": "Ativar streaming", + "enableR1Format": "Ativar parâmetros do modelo R1", + "enableR1FormatTips": "Deve ser ativado ao usar modelos R1 como QWQ, para evitar erro 400", "useAzure": "Usar Azure", "azureApiVersion": "Definir versão da API Azure", "gemini": { diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index d02e16cd5c..d49d784f79 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "Önbellek okuma fiyatı", "cacheWritesPrice": "Önbellek yazma fiyatı", "enableStreaming": "Akışı etkinleştir", + "enableR1Format": "R1 model parametrelerini etkinleştir", + "enableR1FormatTips": "QWQ gibi R1 modelleri kullanıldığında etkinleştirilmelidir, 400 hatası alınmaması için", "useAzure": "Azure kullan", "azureApiVersion": "Azure API sürümünü ayarla", "gemini": { diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index bd197f2aab..efbc5f0db2 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "Giá đọc bộ nhớ đệm", "cacheWritesPrice": "Giá ghi bộ nhớ đệm", "enableStreaming": "Bật streaming", + "enableR1Format": "Kích hoạt tham số mô hình R1", + "enableR1FormatTips": "Cần kích hoạt khi sử dụng các mô hình R1 như QWQ, để tránh lỗi 400", "useAzure": "Sử dụng Azure", "azureApiVersion": "Đặt phiên bản API Azure", "gemini": { diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index d19096787d..deef7addb9 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -350,6 +350,8 @@ "cacheReadsPrice": "缓存读取价格", "cacheWritesPrice": "缓存写入价格", "enableStreaming": "启用流式传输", + "enableR1Format": "启用R1模型传参", + "enableR1FormatTips": "当使用QWQ等类R1模型时需启用,防止报400错误", "useAzure": "使用 Azure 服务", "azureApiVersion": "设置 Azure API 版本", "gemini": { diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index aed74ae3aa..e0f82854df 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -9,22 +9,22 @@ "header": { "title": "設定", "saveButtonTooltip": "儲存變更", - "nothingChangedTooltip": "沒有變更", - "doneButtonTooltip": "捨棄未儲存的變更並關閉設定面板" + "nothingChangedTooltip": "無任何變更", + "doneButtonTooltip": "取消未保存的變更並關閉設定面板" }, "unsavedChangesDialog": { - "title": "未儲存的變更", - "description": "是否捨棄變更並繼續?", + "title": "未保存的變更", + "description": "是否要取消變更並繼續?", "cancelButton": "取消", - "discardButton": "捨棄變更" + "discardButton": "取消變更" }, "sections": { "providers": "提供者", - "autoApprove": "自動核准", - "browser": "瀏覽器 / 電腦使用", + "autoApprove": "自動批准", + "browser": "瀏覽器/電腦使用", "checkpoints": "檢查點", "notifications": "通知", - "contextManagement": "內容管理", + "contextManagement": "上下文管理", "terminal": "終端機", "advanced": "進階", "experimental": "實驗性功能", @@ -32,75 +32,75 @@ "about": "關於 Roo Code" }, "autoApprove": { - "description": "允許 Roo 自動執行操作而無需核准。僅在您完全信任 AI 並理解相關安全風險的情況下啟用這些設定。", + "description": "允許 Roo 無需批准即執行操作。僅在您完全信任 AI 並了解相關安全風險時啟用這些設定。", "readOnly": { - "label": "始終核准唯讀操作", - "description": "啟用後,Roo 將自動檢視目錄內容並讀取檔案,無需點擊核准按鈕。" + "label": "始終批准只讀操作", + "description": "啟用後,Roo 將自動查看目錄內容和讀取文件,無需點擊批准按鈕。" }, "write": { - "label": "始終核准寫入操作", - "description": "自動建立和編輯檔案而無需核准", - "delayLabel": "寫入後延遲以允許診斷偵測潛在問題" + "label": "始終批准寫入操作", + "description": "自動建立和編輯文件而無需批准", + "delayLabel": "寫入後延遲以允許診斷檢測潛在問題" }, "browser": { - "label": "始終核准瀏覽器操作", - "description": "自動執行瀏覽器操作而無需核准", - "note": "注意:僅當模型支援電腦使用時適用" + "label": "始終批准瀏覽器操作", + "description": "自動執行瀏覽器操作而無需批准", + "note": "注意:僅適用於模型支援電腦使用時" }, "retry": { "label": "始終重試失敗的 API 請求", - "description": "當伺服器傳回錯誤回應時自動重試失敗的 API 請求", + "description": "當伺服器返回錯誤響應時自動重試失敗的 API 請求", "delayLabel": "重試請求前的延遲" }, "mcp": { - "label": "始終核准 MCP 工具", - "description": "在 MCP 伺服器檢視中啟用個別 MCP 工具的自動核准(需要此設定和工具的\"始終允許\"核取方塊)" + "label": "始終批准 MCP 工具", + "description": "在 MCP 伺服器檢視中啟用單個 MCP 工具的自動批准(需要此設定和工具的「始終允許」核取方框)" }, "modeSwitch": { - "label": "始終核准模式切換", - "description": "自動在不同模式之間切換而無需核准" + "label": "始終批准模式切換", + "description": "自動在不同模式之間切換而無需批准" }, "subtasks": { - "label": "始終核准子任務的建立和完成", - "description": "允許建立和完成子任務而無需核准" + "label": "始終批准子任務的建立與完成", + "description": "允許建立和完成子任務而無需批准" }, "execute": { - "label": "始終核准允許的執行操作", - "description": "自動執行允許的終端機命令而無需核准", - "allowedCommands": "允許的自動執行命令", - "allowedCommandsDescription": "當\"始終核准執行操作\"啟用時可以自動執行的命令前綴。添加 * 以允許所有命令(謹慎使用)。", - "commandPlaceholder": "輸入命令前綴(例如 'git ')", + "label": "始終批准允許的執行操作", + "description": "自動執行允許的終端機指令而無需批准", + "allowedCommands": "允許自動執行的指令", + "allowedCommandsDescription": "當「始終批准執行操作」啟用時可自動執行的指令前綴。加入 * 以允許所有指令(謹慎使用)。", + "commandPlaceholder": "輸入指令前綴(例如:git )", "addButton": "新增" } }, "providers": { - "configProfile": "設定檔案", + "configProfile": "配置設定檔", "description": "儲存不同的 API 設定以快速切換提供者和設定。", "apiProvider": "API 提供者", "model": "模型", - "nameEmpty": "名稱不能為空", + "nameEmpty": "名稱不可為空", "nameExists": "已存在同名的設定檔", "deleteProfile": "刪除設定檔", - "invalidArnFormat": "無效的 ARN 格式。請檢查上面的範例。", + "invalidArnFormat": "ARN 格式無效。請檢查上方示例。", "enterNewName": "輸入新名稱", "addProfile": "新增設定檔", "renameProfile": "重新命名設定檔", - "newProfile": "新建設定檔", + "newProfile": "新配置設定檔", "enterProfileName": "輸入設定檔名稱", "createProfile": "建立設定檔", "cannotDeleteOnlyProfile": "無法刪除唯一的設定檔", - "vscodeLmDescription": "VS Code 語言模型 API 允許您運行其他 VS Code 擴展提供的模型(包括但不限於 GitHub Copilot)。最簡單的方式是從 VS Code Marketplace 安裝 Copilot 和 Copilot Chat 擴展。", - "awsCustomArnUse": "輸入您要使用的模型的有效 AWS Bedrock ARN。格式範例:", - "awsCustomArnDesc": "確保 ARN 中的區域與您上面選擇的 AWS 區域匹配。", + "vscodeLmDescription": "VS Code 語言模型 API 可讓您執行其他擴充功能(如 GitHub Copilot)提供的模型。最快捷的方式是從 VS Code 市集安裝 Copilot 和 Copilot Chat 擴充功能。", + "awsCustomArnUse": "輸入要使用的模型有效 AWS Bedrock ARN。格式範例:", + "awsCustomArnDesc": "確保 ARN 中的區域與您選擇的 AWS 區域相符。", "openRouterApiKey": "OpenRouter API 金鑰", "getOpenRouterApiKey": "取得 OpenRouter API 金鑰", - "apiKeyStorageNotice": "API 金鑰安全儲存在 VSCode 的秘密儲存中", + "apiKeyStorageNotice": "API 金鑰安全儲存於 VSCode 金鑰儲存中", "glamaApiKey": "Glama API 金鑰", "getGlamaApiKey": "取得 Glama API 金鑰", - "useCustomBaseUrl": "使用自訂基礎 URL", + "useCustomBaseUrl": "使用自定義基礎 URL", "requestyApiKey": "Requesty API 金鑰", "getRequestyApiKey": "取得 Requesty API 金鑰", - "openRouterTransformsText": "將提示和訊息鏈壓縮到內容大小 (OpenRouter 轉換)", + "openRouterTransformsText": "將提示和訊息鏈壓縮到上下文大小 (OpenRouter 轉換)", "anthropicApiKey": "Anthropic API 金鑰", "getAnthropicApiKey": "取得 Anthropic API 金鑰", "deepSeekApiKey": "DeepSeek API 金鑰", @@ -111,109 +111,109 @@ "openAiBaseUrl": "基礎 URL", "getOpenAiApiKey": "取得 OpenAI API 金鑰", "mistralApiKey": "Mistral API 金鑰", - "getMistralApiKey": "取得 Mistral / Codestral API 金鑰", - "codestralBaseUrl": "Codestral 基礎 URL(選用)", - "codestralBaseUrlDesc": "設定 Codestral 模型的替代 URL。", - "awsCredentials": "AWS 憑證", - "awsProfile": "AWS 設定檔", - "awsProfileName": "AWS 設定檔名稱", + "getMistralApiKey": "取得 Mistral/Codestral API 金鑰", + "codestralBaseUrl": "Codestral 基礎 URL(可選)", + "codestralBaseUrlDesc": "設置 Codestral 模型的替代 URL。", + "awsCredentials": "AWS 認證", + "awsProfile": "AWS 個人設定", + "awsProfileName": "AWS 個人設定名稱", "awsAccessKey": "AWS 存取金鑰", - "awsSecretKey": "AWS 秘密金鑰", - "awsSessionToken": "AWS 工作階段權杖", + "awsSecretKey": "AWS 機密金鑰", + "awsSessionToken": "AWS 會話權杖", "awsRegion": "AWS 區域", "awsCrossRegion": "使用跨區域推論", - "vscodeLmModel": "VSCode LM 模型", - "vscodeLmWarning": "注意:這是一個非常實驗性的集成,提供者支援會有所不同。如果您收到有關不支援模型的錯誤,那麼這是提供者方面的問題。", + "vscodeLmModel": "語言模型", + "vscodeLmWarning": "注意:此為實驗性整合,提供者支援可能不同。若遇到模型不支援錯誤,請聯繫提供者。", "googleCloudSetup": { "title": "要使用 Google Cloud Vertex AI,您需要:", - "step1": "1. 建立 Google Cloud 帳戶,啟用 Vertex AI API 並啟用所需的 Claude 模型。", + "step1": "1. 建立 Google Cloud 帳戶,啟用 Vertex AI API 並啟用所需 Claude 模型。", "step2": "2. 安裝 Google Cloud CLI 並設定應用程式預設憑證。", - "step3": "3. 或建立具有憑證的服務帳戶。" + "step3": "3. 或建立具憑證的服務帳戶。" }, "googleCloudCredentials": "Google Cloud 憑證", "googleCloudKeyFile": "Google Cloud 金鑰檔案路徑", "googleCloudProjectId": "Google Cloud 專案 ID", "googleCloudRegion": "Google Cloud 區域", "lmStudio": { - "baseUrl": "基礎 URL(選用)", + "baseUrl": "基礎 URL(可選)", "modelId": "模型 ID", - "speculativeDecoding": "啟用推測解碼", + "speculativeDecoding": "啟用預測性解碼", "draftModelId": "草稿模型 ID", - "draftModelDesc": "推測解碼要正確運作,草稿模型必須來自相同的模型系列。", + "draftModelDesc": "草稿模型必須來自相同模型系列才能正確運作。", "selectDraftModel": "選擇草稿模型", - "noModelsFound": "找不到草稿模型。請確保 LM Studio 已在伺服器模式下執行。", - "description": "LM Studio 允許您在本機電腦上執行模型。關於如何開始使用,請參閱他們的快速入門指南。您還需要啟動 LM Studio 的本機伺服器功能才能與此擴充功能一起使用。注意:Roo Code 使用複雜的提示,並在 Claude 模型上運作最佳。功能較弱的模型可能無法如預期運作。" + "noModelsFound": "未找到草稿模型。請確保 LM Studio 以伺服器模式運行。", + "description": "LM Studio 允許您在本地電腦運行模型。詳細資訊請參閱快速入門指南。您需要啟動 LM Studio 的本地伺服器功能才能與此擴充功能搭配使用。注意: Roo Code 使用複雜提示,與 Claude 模型搭配最佳。功能較弱的模型可能無法正常運作。" }, "ollama": { - "baseUrl": "基礎 URL(選用)", + "baseUrl": "基礎 URL(可選)", "modelId": "模型 ID", - "description": "Ollama 允許您在本機電腦上執行模型。關於如何開始使用,請參閱快速入門指南。", - "warning": "注意:Roo Code 使用複雜的提示,並在 Claude 模型上運作最佳。功能較弱的模型可能無法如預期運作。" + "description": "Ollama 允許您在本地電腦運行模型。請參閱快速入門指南。", + "warning": "注意:Roo Code 使用複雜提示,與 Claude 模型搭配最佳。功能較弱的模型可能無法正常運作。" }, "unboundApiKey": "Unbound API 金鑰", "getUnboundApiKey": "取得 Unbound API 金鑰", "humanRelay": { - "description": "不需要 API 金鑰,但使用者需要協助將資訊複製並貼上到網頁聊天 AI。", - "instructions": "使用期間會彈出對話框,並自動將目前訊息複製到剪貼簿。您需要將這些內容貼上到網頁版 AI(如 ChatGPT 或 Claude),然後將 AI 的回覆複製回對話框並點擊確認按鈕。" + "description": "無需 API 金鑰,但使用者需協助將資訊複製到網頁聊天 AI。", + "instructions": "使用期間,對話方格會彈出且當前訊息會自動複製到剪貼簿。您需將其貼到 ChatGPT 或 Claude 網頁版,再將 AI 回應複製回對話方塊並點擊確認按鈕。" }, "openRouter": { "providerRouting": { "title": "OpenRouter 提供者路由", - "description": "OpenRouter 將請求路由到適合您模型的最佳可用提供者。預設情況下,請求會在頂級提供者之間進行負載平衡以最大化正常運行時間。但是,您可以為此模型選擇特定的提供者。", - "learnMore": "了解更多關於提供者路由的資訊" + "description": "OpenRouter 會將請求路由到適合模型的最佳提供者。預設會在頂尖提供者之間負載平衡以確保正常運作時間。您可為此模型選擇特定提供者。", + "learnMore": "了解更多關於提供者路由" } }, "customModel": { - "capabilities": "設定您的自訂 OpenAI 相容模型的功能和定價。請謹慎指定模型功能,因為它們會影響 Roo Code 的效能。", + "capabilities": "設定自定義 OpenAI 相容模型的功能和定價。指定功能時需謹慎。", "maxTokens": { - "label": "最大輸出權杖", - "description": "模型在回應中可以生成的最大權杖數。(指定 -1 以允許伺服器設定最大權杖數。)" + "label": "最大輸出トークン", + "description": "模型回應可產生的最大トークン數。(指定 -1 使用伺服器設定最大值)" }, "contextWindow": { - "label": "內容視窗大小", - "description": "模型可以處理的總權杖數(輸入 + 輸出)。" + "label": "上下文視窗大小", + "description": "模型可處理的總トークン數(輸入+輸出)" }, "imageSupport": { - "label": "圖像支援", - "description": "此模型是否能夠處理和理解圖像?" + "label": "影像支援", + "description": "此模型是否能處理和理解影像?" }, "computerUse": { "label": "電腦使用", - "description": "此模型是否能夠與瀏覽器互動?(例如 Claude 3.7 Sonnet)" + "description": "此模型能否與瀏覽器互動?(例如 Claude 3.7 Sonnet)" }, "promptCache": { "label": "提示快取", - "description": "此模型是否能夠快取提示?" + "description": "此模型是否能快取提示?" }, "pricing": { "input": { "label": "輸入價格", - "description": "輸入/提示每百萬權杖的成本。這會影響向模型發送內容和指令的成本。" + "description": "每百萬輸入/提示トークン的費用" }, "output": { "label": "輸出價格", - "description": "模型回應每百萬權杖的成本。這會影響生成內容和完成的成本。" + "description": "模型回應每百萬トークン的費用" }, "cacheReads": { "label": "快取讀取價格", - "description": "從快取讀取每百萬權杖的成本。這是檢索快取回應時收取的價格。" + "description": "讀取快取時的費用" }, "cacheWrites": { "label": "快取寫入價格", - "description": "寫入快取每百萬權杖的成本。這是首次快取提示時收取的價格。" + "description": "首次將提示寫入快取時的費用" } }, - "resetDefaults": "重設為預設值" + "resetDefaults": "重設預設值" } }, "browser": { "enable": { "label": "啟用瀏覽器工具", - "description": "啟用後,Roo 可以在使用支援電腦使用的模型時使用瀏覽器與網站互動。" + "description": "啟用後,Roo 可在使用支援電腦使用的模型時使用瀏覽器互動。" }, "viewport": { - "label": "視窗大小", - "description": "選擇瀏覽器互動的視窗大小。這會影響網站的顯示方式和互動方式。", + "label": "視口大小", + "description": "選擇瀏覽器互動的視口大小。", "options": { "largeDesktop": "大型桌面 (1280x800)", "smallDesktop": "小型桌面 (900x600)", @@ -223,123 +223,123 @@ }, "screenshotQuality": { "label": "截圖品質", - "description": "調整瀏覽器截圖的 WebP 品質。較高的值提供更清晰的截圖,但會增加 token 使用量。" + "description": "調整瀏覽器截圖的 WebP 品質。較高值會增加 token 使用量。" }, "remote": { "label": "使用遠端瀏覽器連線", - "description": "連線到啟用遠端偵錯的 Chrome 瀏覽器 (--remote-debugging-port=9222)。", - "urlPlaceholder": "自訂 URL(例如 http://localhost:9222)", + "description": "連線到啟用遠端除錯的 Chrome 瀏覽器(--remote-debugging-port=9222)。", + "urlPlaceholder": "自定義 URL(例如 http://localhost:9222)", "testButton": "測試連線", "testingButton": "測試中...", - "instructions": "輸入 DevTools 協議主機地址或留空以自動探索本地 Chrome 實例。測試連線按鈕將嘗試使用自訂 URL(如果提供),或者如果欄位為空則自動探索。" + "instructions": "輸入 DevTools 協定主機位址或留空以自動發現本機 Chrome 執行個體。" } }, "checkpoints": { "enable": { "label": "啟用自動檢查點", - "description": "啟用後,Roo 將在任務執行期間自動建立檢查點,使審核變更或返回到早期狀態變得容易。" + "description": "啟用後,Roo 將在任務執行期間自動建立檢查點。" } }, "notifications": { "sound": { "label": "啟用音效", - "description": "啟用後,Roo 將為通知和事件播放音效。", + "description": "啟用後,Roo 將為通知播放音效", "volumeLabel": "音量" }, "tts": { "label": "啟用文字轉語音", - "description": "啟用後,Roo 將使用文字轉語音功能朗讀其回應。", + "description": "啟用後,Roo 將使用文字轉語音朗讀回應", "speedLabel": "速度" } }, "contextManagement": { - "description": "控制在 AI 的內容視窗中包含哪些資訊,影響 token 使用和回應品質", + "description": "控制 AI 上下文視窗包含的資訊,影響 token 使用和回應品質", "openTabs": { - "label": "開啟分頁內容限制", - "description": "在內容中包含的 VSCode 開啟分頁的最大數量。較高的值提供更多內容,但會增加 token 使用量。" + "label": "開啟的分頁上下文限制", + "description": "最多包含的 VSCode 開啟分頁數" }, "workspaceFiles": { - "label": "工作區檔案內容限制", - "description": "在目前工作目錄詳細資訊中包含的最大檔案數。較高的值提供更多內容,但會增加 token 使用量。" + "label": "工作區檔案上下文限制", + "description": "最多包含的當前工作目錄詳細資訊檔案數" }, "rooignore": { - "label": "在列表和搜尋中顯示 .rooignore 檔案", - "description": "啟用後,與 .rooignore 中模式匹配的檔案將在列表中顯示鎖定符號。禁用時,這些檔案將從檔案列表和搜尋中完全隱藏。" + "label": "顯示 .rooignore 檔案", + "description": "啟用後,符合 .rooignore 模式之檔案會顯示上鎖符號" }, "maxReadFile": { "label": "檔案讀取自動截斷閾值", - "description": "一批中從檔案讀取的預設行數。較低的值會減少內容/資源使用,但可能需要對大型檔案進行更多次讀取。", + "description": "預設讀取檔案的行數", "lines": "行" } }, "terminal": { "outputLineLimit": { "label": "終端機輸出限制", - "description": "執行命令時在終端機輸出中包含的最大行數。超過時將從中間刪除行,節省 token。" + "description": "執行指令時包含的最大行數" }, "shellIntegrationTimeout": { - "label": "終端機 Shell 整合逾時", - "description": "執行命令前等待 Shell 整合初始化的最長時間。對於 Shell 啟動時間較長的使用者,如果在終端機中看到\"Shell Integration Unavailable\"錯誤,可能需要增加此值。" + "label": "終端機 shell 綜合超時", + "description": "shell 綜合初始化的最長等待時間" } }, "advanced": { "rateLimit": { "label": "速率限制", - "description": "API 請求之間的最小時間。" + "description": "API 請求間的最短時間" }, "diff": { - "label": "啟用透過差異編輯", - "description": "啟用後,Roo 將能夠更快地編輯檔案,並將自動拒絕截斷的完整檔案寫入。與最新的 Claude 3.7 Sonnet 模型搭配最佳。", + "label": "啟用 diff 編輯", + "description": "啟用後可更快編輯文件並自動拒絕不完整的完整文件寫入", "strategy": { - "label": "Diff 策略", + "label": "diff 策略", "options": { - "standard": "標準(單塊)", - "multiBlock": "實驗性:多塊 diff", + "standard": "標準(單一區塊)", + "multiBlock": "實驗性:多區塊 diff", "unified": "實驗性:統一 diff" }, "descriptions": { - "standard": "標準 diff 策略一次對一個程式碼塊應用變更。", - "unified": "統一 diff 策略採用多種方法應用差異並選擇最佳方法。", - "multiBlock": "多塊 diff 策略允許在一個請求中更新檔案中的多個程式碼塊。" + "standard": "每次修改單一程式區塊", + "multiBlock": "單次請求更新多個程式區塊", + "unified": "多種 diff 方法選擇最佳方案" } }, "matchPrecision": { - "label": "匹配精度", - "description": "此滑桿控制應用差異時程式碼部分必須匹配的精確度。較低的值允許更靈活的匹配,但會增加錯誤替換的風險。極其謹慎地使用低於 100% 的值。" + "label": "匹配精確度", + "description": "此滑桿控制應用 diff 時程式區塊的匹配精確度" } } }, "experimental": { "warning": "⚠️", "DIFF_STRATEGY": { - "name": "使用實驗性統一差異策略", - "description": "啟用實驗性統一差異策略。此策略可能減少由模型錯誤引起的重試次數,但可能導致意外行為或不正確的編輯。僅在您了解風險並願意仔細審查所有更改時才啟用。" + "name": "使用實驗性統一 diff 策略", + "description": "此實驗性策略可能減少模型錯誤導致的重試次數,但需謹慎使用" }, "SEARCH_AND_REPLACE": { - "name": "使用實驗性搜索和替換工具", - "description": "啟用實驗性搜索和替換工具,允許 Roo 在一個請求中替換搜索詞的多個實例。" + "name": "使用實驗性搜尋與取代工具", + "description": "允許 Roo 在單一請求中取代多個搜尋詞實例" }, "INSERT_BLOCK": { "name": "使用實驗性插入內容工具", - "description": "啟用實驗性插入內容工具,允許 Roo 在特定行號插入內容,無需創建差異。" + "description": "允許在特定行號插入內容而無需建立 diff" }, "POWER_STEERING": { - "name": "使用實驗性\"動力轉向\"模式", - "description": "啟用後,Roo 將更頻繁地提醒模型關於其當前模式定義的詳細信息。這將導致對角色定義和自定義指令的更強遵守,但每條消息將使用更多 token。" + "name": "使用實驗性「動力轉向」模式", + "description": "此模式會更頻繁地提醒模型其角色定義" }, "MULTI_SEARCH_AND_REPLACE": { - "name": "使用實驗性多塊差異工具", - "description": "啟用後,Roo 將使用多塊差異工具。這將嘗試在一個請求中更新文件中的多個代碼塊。" + "name": "使用實驗性多區塊 diff 工具", + "description": "單次請求更新檔案中的多個程式區塊" } }, "temperature": { - "useCustom": "使用自訂溫度", - "description": "控制模型回應中的隨機性。", - "rangeDescription": "較高的值使輸出更隨機,較低的值使其更確定性。" + "useCustom": "使用自定義溫度", + "description": "控制模型回應的隨機性", + "rangeDescription": "較高值使輸出更隨機,較低值更確定" }, "modelInfo": { - "supportsImages": "支援圖像", - "noImages": "不支援圖像", + "supportsImages": "支援影像", + "noImages": "不支援影像", "supportsComputerUse": "支援電腦使用", "noComputerUse": "不支援電腦使用", "supportsPromptCache": "支援提示快取", @@ -349,81 +349,83 @@ "outputPrice": "輸出價格", "cacheReadsPrice": "快取讀取價格", "cacheWritesPrice": "快取寫入價格", - "enableStreaming": "啟用串流媒體", + "enableStreaming": "啟用串流", + "enableR1Format": "啟用R1模型參數", + "enableR1FormatTips": "當使用QWQ等類R1模型時需啟用,防止400錯誤", "useAzure": "使用 Azure", "azureApiVersion": "設定 Azure API 版本", "gemini": { - "freeRequests": "* 每分鐘免費 {{count}} 個請求。之後,計費取決於提示大小。", - "pricingDetails": "有關更多資訊,請參閱定價詳情。" + "freeRequests": "* 每分鐘免費 {{count}} 次請求。超過後依提示大小計費。", + "pricingDetails": "查看定價細節" } }, "modelPicker": { - "automaticFetch": "擴充功能會自動獲取 {{serviceName}} 上可用的最新模型列表。如果您不確定選擇哪個模型,Roo Code 與 {{defaultModelId}} 配合最佳。您還可以搜尋\"free\"以尋找目前可用的免費選項。", + "automaticFetch": "擴充功能會自動取得 {{serviceName}} 上最新模型列表。若不確定選擇,Roo Code 與 {{defaultModelId}} 搭配最佳。", "label": "模型", "searchPlaceholder": "搜尋", "noMatchFound": "未找到相符項目", - "useCustomModel": "使用自訂: {{modelId}}" + "useCustomModel": "使用自定義模型:{{modelId}}" }, "footer": { - "feedback": "如果您有任何問題或反饋,請隨時在 github.com/RooVetGit/Roo-Code 上提出問題或加入 reddit.com/r/RooCodediscord.gg/roocode", + "feedback": "若有問題或建議,請在 GitHub 建立 issue 或加入 Discord", "version": "Roo Code v{{version}}", "telemetry": { - "label": "允許匿名錯誤和使用情況報告", - "description": "透過發送匿名使用資料和錯誤報告來幫助改進 Roo Code。絕不會發送程式碼、提示或個人資訊。有關更多詳細資訊,請參閱我們的隱私政策。" + "label": "允許匿名錯誤和使用報告", + "description": "匿名資料協助改善 Roo Code,絕不傳送程式碼或個人資訊" }, "reset": { - "description": "重設擴充功能中的所有全域狀態和秘密儲存。", + "description": "重設擴充功能的全局狀態和金鑰儲存", "button": "重設" } }, "thinkingBudget": { - "maxTokens": "最大 tokens", - "maxThinkingTokens": "最大思考 tokens" + "maxTokens": "最大 token 數", + "maxThinkingTokens": "最大思考 token 數" }, "validation": { - "apiKey": "您必須提供有效的 API 金鑰。", - "awsRegion": "您必須選擇一個區域來使用 AWS Bedrock。", - "googleCloud": "您必須提供有效的 Google Cloud 專案 ID 和區域。", - "modelId": "您必須提供有效的模型 ID。", - "modelSelector": "您必須提供有效的模型選擇器。", - "openAi": "您必須提供有效的基礎 URL、API 金鑰和模型 ID。", + "apiKey": "需要有效 API 金鑰", + "awsRegion": "請選擇 AWS 區域", + "googleCloud": "需要有效的 Google Cloud 專案 ID 和區域", + "modelId": "需要有效模型 ID", + "modelSelector": "需要有效模型選擇器", + "openAi": "需要有效的基礎 URL、API 金鑰和模型 ID", "arn": { - "invalidFormat": "ARN 格式無效。請檢查格式要求。", - "regionMismatch": "警告:您的 ARN 中的區域 ({{arnRegion}}) 與您選擇的區域 ({{region}}) 不符。這可能會導致存取問題。提供者將使用 ARN 中的區域。" + "invalidFormat": "ARN 格式無效", + "regionMismatch": "ARN 區域與選擇的區域不匹配" }, - "modelAvailability": "您提供的模型 ID ({{modelId}}) 無法使用。請選擇其他模型。" + "modelAvailability": "該模型 ID 不可用" }, "placeholders": { - "apiKey": "請輸入 API 金鑰...", - "profileName": "請輸入設定檔名稱", - "accessKey": "請輸入存取金鑰...", - "secretKey": "請輸入密鑰...", - "sessionToken": "請輸入工作階段權杖...", - "credentialsJson": "請輸入憑證 JSON...", - "keyFilePath": "請輸入金鑰檔案路徑...", - "projectId": "請輸入專案 ID...", - "customArn": "請輸入 ARN(例:arn:aws:bedrock:us-east-1:123456789012:foundation-model/my-model)", - "baseUrl": "請輸入基礎 URL...", + "apiKey": "輸入 API 金鑰...", + "profileName": "輸入設定檔名稱", + "accessKey": "輸入存取金鑰...", + "secretKey": "輸入機密金鑰...", + "sessionToken": "輸入會話權杖...", + "credentialsJson": "輸入憑證 JSON...", + "keyFilePath": "輸入金鑰檔案路徑...", + "projectId": "輸入專案 ID...", + "customArn": "ARN 範例:arn:aws:bedrock:...", + "baseUrl": "輸入基礎 URL...", "modelId": { - "lmStudio": "例:meta-llama-3.1-8b-instruct", - "lmStudioDraft": "例:lmstudio-community/llama-3.2-1b-instruct", - "ollama": "例:llama3.1" + "lmStudio": "範例:meta-llama-3.1-8b-instruct", + "lmStudioDraft": "範例:lmstudio-community/llama-3.2-1b-instruct", + "ollama": "範例:llama3.1" }, "numbers": { - "maxTokens": "例:4096", - "contextWindow": "例:128000", - "inputPrice": "例:0.0001", - "outputPrice": "例:0.0002", - "cacheWritePrice": "例:0.00005" + "maxTokens": "範例:4096", + "contextWindow": "範例:128000", + "inputPrice": "範例:0.0001", + "outputPrice": "範例:0.0002", + "cacheWritePrice": "範例:0.00005" } }, "defaults": { - "ollamaUrl": "預設值:http://localhost:11434", - "lmStudioUrl": "預設值:http://localhost:1234", - "geminiUrl": "預設值:https://generativelanguage.googleapis.com" + "ollamaUrl": "預設:http://localhost:11434", + "lmStudioUrl": "預設:http://localhost:1234", + "geminiUrl": "預設:https://generativelanguage.googleapis.com" }, "labels": { - "customArn": "自訂 ARN", - "useCustomArn": "使用自訂 ARN..." + "customArn": "自定義 ARN", + "useCustomArn": "使用自定義 ARN..." } }