diff --git a/.changeset/broad-custom-provider-efforts.md b/.changeset/broad-custom-provider-efforts.md new file mode 100644 index 00000000000..c0746956176 --- /dev/null +++ b/.changeset/broad-custom-provider-efforts.md @@ -0,0 +1,6 @@ +--- +"@kilocode/cli": patch +"kilo-code": patch +--- + +Automatically expose broad reasoning effort options for custom provider models and link saved providers to advanced JSON configuration. diff --git a/packages/kilo-vscode/src/shared/custom-provider.ts b/packages/kilo-vscode/src/shared/custom-provider.ts index 757897d1c16..3ac8ddb917b 100644 --- a/packages/kilo-vscode/src/shared/custom-provider.ts +++ b/packages/kilo-vscode/src/shared/custom-provider.ts @@ -12,14 +12,7 @@ export const EnvSchema = z .trim() .regex(/^[A-Z_][A-Z0-9_]*$/, INVALID_ENV) -const VariantConfigSchema = z.object({ - enable_thinking: z.boolean().optional(), - thinking: z.object({ type: z.enum(["enabled", "disabled", "adaptive"]) }).optional(), - reasoning_split: z.boolean().optional(), - reasoningEffort: z.enum(["none", "minimal", "low", "medium", "high", "xhigh"]).optional(), - effort: z.enum(["low", "medium", "high", "xhigh", "max"]).optional(), - chat_template_args: z.object({ enable_thinking: z.boolean() }).optional(), -}) +const VariantConfigSchema = z.record(z.string(), z.unknown()) export type VariantConfig = z.infer diff --git a/packages/kilo-vscode/tests/unit/custom-provider-dialog-validate.test.ts b/packages/kilo-vscode/tests/unit/custom-provider-dialog-validate.test.ts index be1f69c0504..814b2147e0b 100644 --- a/packages/kilo-vscode/tests/unit/custom-provider-dialog-validate.test.ts +++ b/packages/kilo-vscode/tests/unit/custom-provider-dialog-validate.test.ts @@ -93,7 +93,7 @@ describe("validateCustomProvider – variant name validation", () => { ] const out = validateCustomProvider(args(form)) expect(out.result).toBeUndefined() - expect(out.errors.models[0].variants?.[0]?.name).toBe("provider.custom.error.required") + expect(out.errors.models[0].variants?.[0]?.name).toBe('variants[""]: provider.custom.error.required') }) it("blocks submit and reports error when reasoning is enabled with a whitespace-only variant name", () => { @@ -112,7 +112,7 @@ describe("validateCustomProvider – variant name validation", () => { ] const out = validateCustomProvider(args(form)) expect(out.result).toBeUndefined() - expect(out.errors.models[0].variants?.[0]?.name).toBe("provider.custom.error.required") + expect(out.errors.models[0].variants?.[0]?.name).toBe('variants[" "]: provider.custom.error.required') }) it("blocks submit and reports duplicate error for two variants with the same name", () => { @@ -140,7 +140,7 @@ describe("validateCustomProvider – variant name validation", () => { ] const out = validateCustomProvider(args(form)) expect(out.result).toBeUndefined() - expect(out.errors.models[0].variants?.[1]?.name).toBe("provider.custom.error.duplicate") + expect(out.errors.models[0].variants?.[1]?.name).toBe('variants["fast"]: provider.custom.error.duplicate') }) it("ignores variants entirely when reasoning is disabled, even if they have empty names", () => { @@ -206,6 +206,34 @@ describe("validateCustomProvider – variant name validation", () => { }) }) + it("preserves opaque variant options after the editor controls are removed", () => { + const form = base() + const raw = { + thinking: { type: "adaptive", display: "summarized" }, + reasoningSummary: "auto", + include: ["reasoning.encrypted_content"], + customOption: { enabled: true }, + } + form.models[0].reasoning = true + form.models[0].variants = [ + { + name: "high", + raw, + enableThinking: undefined, + thinking: "adaptive", + splitReasoning: undefined, + outputEffort: undefined, + reasoningEffort: undefined, + chatTemplateArgs: undefined, + }, + ] + + const out = validateCustomProvider(args(form)) + expect(out.result).toBeDefined() + const saved = out.result!.config.models["model-1"] as Record + expect(saved.variants).toEqual({ high: raw }) + }) + it("serializes image modality when supportsImages is set", () => { const form = base() form.models[0].supportsImages = true diff --git a/packages/kilo-vscode/tests/unit/custom-provider.test.ts b/packages/kilo-vscode/tests/unit/custom-provider.test.ts index b4869706e43..30b420abb95 100644 --- a/packages/kilo-vscode/tests/unit/custom-provider.test.ts +++ b/packages/kilo-vscode/tests/unit/custom-provider.test.ts @@ -162,6 +162,35 @@ describe("sanitizeCustomProviderConfig", () => { }) }) + it("preserves opaque options on existing variants", () => { + const variant = { + thinking: { type: "adaptive", display: "summarized" }, + reasoningEffort: "max", + reasoningSummary: "auto", + include: ["reasoning.encrypted_content"], + customOption: { enabled: true }, + } + const result = sanitizeCustomProviderConfig({ + name: "Thinking Provider", + options: { baseURL: "https://example.com/v1" }, + models: { + "model-1": { + name: "Model One", + variants: { high: variant }, + }, + }, + }) + + expect(result).toEqual({ + value: { + npm: "@ai-sdk/openai-compatible", + name: "Thinking Provider", + options: { baseURL: "https://example.com/v1" }, + models: { "model-1": { name: "Model One", variants: { high: variant } } }, + }, + }) + }) + it("preserves core custom model modalities", () => { const result = sanitizeCustomProviderConfig({ name: "Media Provider", diff --git a/packages/kilo-vscode/tests/unit/open-config-message.test.ts b/packages/kilo-vscode/tests/unit/open-config-message.test.ts new file mode 100644 index 00000000000..f16f0ee458d --- /dev/null +++ b/packages/kilo-vscode/tests/unit/open-config-message.test.ts @@ -0,0 +1,14 @@ +import { describe, expect, it } from "bun:test" +import { configMessage } from "../../webview-ui/src/utils/open-config" + +describe("configMessage", () => { + it("builds a global config request with localized labels", () => { + const message = configMessage("global", (key, params) => `${key}:${params?.scope ?? ""}`) + + expect(message.type).toBe("openConfigFile") + expect(message.scope).toBe("global") + expect(message.labels.scope).toBe("settings.config.scope.global:") + expect(message.labels.title).toBe("settings.config.title:settings.config.scope.global:") + expect(message.labels.openFailed).toBe("settings.config.openFailed:settings.config.scope.global:") + }) +}) diff --git a/packages/kilo-vscode/tests/unit/provider-actions-save.test.ts b/packages/kilo-vscode/tests/unit/provider-actions-save.test.ts index a6499bab1c6..8f0e10b60a8 100644 --- a/packages/kilo-vscode/tests/unit/provider-actions-save.test.ts +++ b/packages/kilo-vscode/tests/unit/provider-actions-save.test.ts @@ -206,6 +206,27 @@ describe("saveCustomProvider", () => { expect(calls.set).toEqual([{ providerID: "myprovider", auth: { type: "api", key: "sk-test" } }]) }) + it("preserves opaque existing variant options through the save boundary", async () => { + const variant = { + thinking: { type: "adaptive", display: "summarized" }, + reasoningEffort: "custom", + reasoningSummary: "auto", + include: ["reasoning.encrypted_content"], + customOption: { enabled: true }, + } + const saved = { + ...createSavedProvider(), + models: { "model-1": { name: "Model One", reasoning: true, variants: { high: variant } } }, + } + const existing = { disabled_providers: [], provider: { myprovider: saved } } + const { ctx, calls, setCachedConfig } = createCtx(existing) + + await saveCustomProvider(ctx, "req", "myprovider", saved, undefined, false, null, setCachedConfig) + + const provider = (calls.config[0]?.config.provider as Record).myprovider + expect(provider.models["model-1"].variants.high).toEqual(variant) + }) + // Regression tests for https://github.com/Kilo-Org/kilocode/issues/9186 // // The CLI's config.update endpoint deep-merges its payload with the existing diff --git a/packages/kilo-vscode/webview-ui/src/components/settings/CustomProviderDialog.tsx b/packages/kilo-vscode/webview-ui/src/components/settings/CustomProviderDialog.tsx index 1041664e41c..c548b06c76d 100644 --- a/packages/kilo-vscode/webview-ui/src/components/settings/CustomProviderDialog.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/settings/CustomProviderDialog.tsx @@ -15,6 +15,7 @@ import { useProvider } from "../../context/provider" import { useVSCode } from "../../context/vscode" import type { ExtensionMessage, ProviderAuthState, ProviderConfig } from "../../types/messages" import { createProviderAction } from "../../utils/provider-action" +import { configMessage } from "../../utils/open-config" import { MASKED_CUSTOM_PROVIDER_KEY, resolveCustomProviderKey } from "../../../../src/shared/custom-provider" import { CUSTOM_PROVIDER_PACKAGE, @@ -89,6 +90,7 @@ function modes(raw: unknown): Modalities { function parseVariant([name, cfg]: [string, Record]): VariantEntry { return { name, + raw: cfg, enableThinking: typeof cfg.enable_thinking === "boolean" ? cfg.enable_thinking : undefined, thinking: typeof cfg.thinking === "object" && cfg.thinking !== null @@ -460,25 +462,6 @@ const CustomProviderDialog = (props: CustomProviderDialogProps) => { setErrors("headers", (v) => v.filter((_, i) => i !== index)) } - function addVariant(mi: number) { - const blank: VariantEntry = { - name: "", - enableThinking: undefined, - thinking: undefined, - splitReasoning: undefined, - reasoningEffort: undefined, - outputEffort: undefined, - chatTemplateArgs: undefined, - } - setForm("models", mi, "variants", (v) => [...v, blank]) - setErrors("models", mi, "variants", (v) => [...(v ?? []), {}]) - } - - function removeVariant(mi: number, vi: number) { - setForm("models", mi, "variants", (v) => v.filter((_, i) => i !== vi)) - setErrors("models", mi, "variants", (v) => (v ?? []).filter((_, i) => i !== vi)) - } - function validate() { const output = validateCustomProvider({ form, @@ -581,6 +564,19 @@ const CustomProviderDialog = (props: CustomProviderDialogProps) => { {language.t("provider.custom.description.link")} {language.t("provider.custom.description.suffix")} + + +
@@ -673,7 +669,6 @@ const CustomProviderDialog = (props: CustomProviderDialogProps) => { {(m, i) => ( 1} @@ -682,23 +677,6 @@ const CustomProviderDialog = (props: CustomProviderDialogProps) => { onChangeReasoning={(v) => setForm("models", i(), "reasoning", v)} onChangeSupportsImages={(v) => setForm("models", i(), "supportsImages", v)} onRemove={() => removeModel(i())} - onAddVariant={() => addVariant(i())} - onRemoveVariant={(vi) => removeVariant(i(), vi)} - onChangeVariantName={(vi, val) => setForm("models", i(), "variants", vi, "name", val)} - onChangeVariantEnableThinking={(vi, val) => - setForm("models", i(), "variants", vi, "enableThinking", val) - } - onChangeVariantThinking={(vi, val) => setForm("models", i(), "variants", vi, "thinking", val)} - onChangeVariantSplitReasoning={(vi, val) => - setForm("models", i(), "variants", vi, "splitReasoning", val) - } - onChangeVariantReasoningEffort={(vi, val) => - setForm("models", i(), "variants", vi, "reasoningEffort", val) - } - onChangeVariantOutputEffort={(vi, val) => setForm("models", i(), "variants", vi, "outputEffort", val)} - onChangeVariantChatTemplateArgs={(vi, val) => - setForm("models", i(), "variants", vi, "chatTemplateArgs", val) - } /> )} diff --git a/packages/kilo-vscode/webview-ui/src/components/settings/CustomProviderModelCard.tsx b/packages/kilo-vscode/webview-ui/src/components/settings/CustomProviderModelCard.tsx index d1b4ea13f3d..a33984738c3 100644 --- a/packages/kilo-vscode/webview-ui/src/components/settings/CustomProviderModelCard.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/settings/CustomProviderModelCard.tsx @@ -1,8 +1,6 @@ -import { Button } from "@kilocode/kilo-ui/button" import { IconButton } from "@kilocode/kilo-ui/icon-button" -import { Select } from "@kilocode/kilo-ui/select" import { TextField } from "@kilocode/kilo-ui/text-field" -import { For, Show } from "solid-js" +import { Show } from "solid-js" import { useLanguage } from "../../context/language" export type Translator = ReturnType["t"] @@ -23,6 +21,7 @@ export type Modalities = { export type VariantEntry = { name: string + raw?: Record enableThinking: EnableThinkingValue thinking: ThinkingTypeValue splitReasoning: SplitReasoningValue @@ -40,264 +39,8 @@ export type ModelEntry = { variants: VariantEntry[] } -type SelectOption = { value: T; labelKey: string } - -const ENABLE_THINKING_OPTIONS: SelectOption[] = [ - { value: undefined, labelKey: "provider.custom.models.variants.option.unset" }, - { value: true, labelKey: "provider.custom.models.variants.enableThinking.true" }, - { value: false, labelKey: "provider.custom.models.variants.enableThinking.false" }, -] - -const THINKING_OPTIONS: SelectOption[] = [ - { value: undefined, labelKey: "provider.custom.models.variants.option.unset" }, - { value: "enabled", labelKey: "provider.custom.models.variants.thinking.enabled" }, - { value: "disabled", labelKey: "provider.custom.models.variants.thinking.disabled" }, - { value: "adaptive", labelKey: "provider.custom.models.variants.thinking.adaptive" }, -] - -const SPLIT_REASONING_OPTIONS: SelectOption[] = [ - { value: undefined, labelKey: "provider.custom.models.variants.option.unset" }, - { value: true, labelKey: "provider.custom.models.variants.splitReasoning.true" }, - { value: false, labelKey: "provider.custom.models.variants.splitReasoning.false" }, -] - -const CHAT_TEMPLATE_ARGS_OPTIONS: SelectOption[] = [ - { value: undefined, labelKey: "provider.custom.models.variants.option.unset" }, - { value: true, labelKey: "provider.custom.models.variants.chatTemplateArgs.true" }, - { value: false, labelKey: "provider.custom.models.variants.chatTemplateArgs.false" }, -] - -const REASONING_EFFORT_OPTIONS: SelectOption[] = [ - { value: undefined, labelKey: "provider.custom.models.variants.option.unset" }, - { value: "none", labelKey: "provider.custom.models.variants.reasoningEffort.none" }, - { value: "minimal", labelKey: "provider.custom.models.variants.reasoningEffort.minimal" }, - { value: "low", labelKey: "provider.custom.models.variants.reasoningEffort.low" }, - { value: "medium", labelKey: "provider.custom.models.variants.reasoningEffort.medium" }, - { value: "high", labelKey: "provider.custom.models.variants.reasoningEffort.high" }, - { value: "xhigh", labelKey: "provider.custom.models.variants.reasoningEffort.xhigh" }, -] - -const OUTPUT_EFFORT_OPTIONS: SelectOption[] = [ - { value: undefined, labelKey: "provider.custom.models.variants.option.unset" }, - { value: "low", labelKey: "provider.custom.models.variants.outputEffort.low" }, - { value: "medium", labelKey: "provider.custom.models.variants.outputEffort.medium" }, - { value: "high", labelKey: "provider.custom.models.variants.outputEffort.high" }, - { value: "xhigh", labelKey: "provider.custom.models.variants.outputEffort.xhigh" }, - { value: "max", labelKey: "provider.custom.models.variants.outputEffort.max" }, -] - -type VariantRowProps = { - v: VariantEntry - vi: () => number - isFirst: () => boolean - error: { name?: string } | undefined - t: Translator - onChangeName: (val: string) => void - onChangeEnableThinking: (val: EnableThinkingValue) => void - onChangeThinking: (val: ThinkingTypeValue) => void - onChangeSplitReasoning: (val: SplitReasoningValue) => void - onChangeReasoningEffort: (val: ReasoningEffortValue) => void - onChangeOutputEffort: (val: OutputEffortValue) => void - onChangeChatTemplateArgs: (val: ChatTemplateArgsValue) => void - onRemove: () => void -} - -function VariantRow(props: VariantRowProps) { - return ( -
- -
- -
-
- -
-
- - o.value === props.v.thinking)} - value={(o) => String(o.value)} - label={(o) => props.t(o.labelKey)} - onSelect={(o) => props.onChangeThinking(o?.value)} - placeholder={props.t("provider.custom.models.variants.thinking.placeholder")} - variant="secondary" - size="small" - triggerVariant="settings" - /> -
-
- - o.value === props.v.reasoningEffort)} - value={(o) => String(o.value)} - label={(o) => props.t(o.labelKey)} - onSelect={(o) => props.onChangeReasoningEffort(o?.value)} - placeholder={props.t("provider.custom.models.variants.reasoningEffort.placeholder")} - variant="secondary" - size="small" - triggerVariant="settings" - /> -
-
- - o.value === props.v.chatTemplateArgs)} - value={(o) => String(o.value)} - label={(o) => props.t(o.labelKey)} - onSelect={(o) => props.onChangeChatTemplateArgs(o?.value)} - placeholder={props.t("provider.custom.models.variants.chatTemplateArgs.placeholder")} - variant="secondary" - size="small" - triggerVariant="settings" - /> -
- -
-
- ) -} - type ModelCardProps = { m: ModelEntry - i: () => number errors: { id?: string; name?: string; variants?: Array<{ name?: string }> } t: Translator canRemove: boolean @@ -306,18 +49,11 @@ type ModelCardProps = { onChangeReasoning: (val: boolean) => void onChangeSupportsImages: (val: boolean) => void onRemove: () => void - onAddVariant: () => void - onRemoveVariant: (vi: number) => void - onChangeVariantName: (vi: number, val: string) => void - onChangeVariantEnableThinking: (vi: number, val: EnableThinkingValue) => void - onChangeVariantThinking: (vi: number, val: ThinkingTypeValue) => void - onChangeVariantSplitReasoning: (vi: number, val: SplitReasoningValue) => void - onChangeVariantReasoningEffort: (vi: number, val: ReasoningEffortValue) => void - onChangeVariantOutputEffort: (vi: number, val: OutputEffortValue) => void - onChangeVariantChatTemplateArgs: (vi: number, val: ChatTemplateArgsValue) => void } export function ModelCard(props: ModelCardProps) { + const issue = () => props.errors.variants?.find((error) => error.name)?.name + return (
- {/* Variants — only available when reasoning is enabled */} - - 0}> -
- - - {(v, vi) => ( - vi() === 0} - error={props.errors.variants?.[vi()]} - t={props.t} - onChangeName={(val) => props.onChangeVariantName(vi(), val)} - onChangeEnableThinking={(val) => props.onChangeVariantEnableThinking(vi(), val)} - onChangeThinking={(val) => props.onChangeVariantThinking(vi(), val)} - onChangeSplitReasoning={(val) => props.onChangeVariantSplitReasoning(vi(), val)} - onChangeReasoningEffort={(val) => props.onChangeVariantReasoningEffort(vi(), val)} - onChangeOutputEffort={(val) => props.onChangeVariantOutputEffort(vi(), val)} - onChangeChatTemplateArgs={(val) => props.onChangeVariantChatTemplateArgs(vi(), val)} - onRemove={() => props.onRemoveVariant(vi())} - /> - )} - -
-
- + + {(error) => ( + + {error()} + + )}
) diff --git a/packages/kilo-vscode/webview-ui/src/components/settings/CustomProviderValidation.ts b/packages/kilo-vscode/webview-ui/src/components/settings/CustomProviderValidation.ts index 2331d295435..2300e9fe910 100644 --- a/packages/kilo-vscode/webview-ui/src/components/settings/CustomProviderValidation.ts +++ b/packages/kilo-vscode/webview-ui/src/components/settings/CustomProviderValidation.ts @@ -57,8 +57,9 @@ const PROVIDER_ID = /^[a-z0-9][a-z0-9-_]*$/ function checkVariant(v: VariantEntry, seen: Set, t: Translator) { const n = v.name.trim() - if (!n) return { name: t("provider.custom.error.required") } - if (seen.has(n)) return { name: t("provider.custom.error.duplicate") } + const path = `variants[${JSON.stringify(v.name)}]` + if (!n) return { name: `${path}: ${t("provider.custom.error.required")}` } + if (seen.has(n)) return { name: `${path}: ${t("provider.custom.error.duplicate")}` } seen.add(n) return { name: undefined } } @@ -105,6 +106,7 @@ function checkProviderID(id: string, editing: boolean, disabled: string[], exist } function serializeVariant(v: VariantEntry): [string, Record] { + if (v.raw) return [v.name.trim(), v.raw] const cfg: Record = {} if (v.enableThinking !== undefined) cfg.enable_thinking = v.enableThinking if (v.thinking !== undefined) cfg.thinking = { type: v.thinking } diff --git a/packages/kilo-vscode/webview-ui/src/components/settings/Settings.tsx b/packages/kilo-vscode/webview-ui/src/components/settings/Settings.tsx index 8bd39f14a44..ab8a5e99fba 100644 --- a/packages/kilo-vscode/webview-ui/src/components/settings/Settings.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/settings/Settings.tsx @@ -28,6 +28,7 @@ import SandboxingTab from "./SandboxingTab" import * as Sandboxing from "./sandboxing" import { useServer } from "../../context/server" import type { MigrationSource } from "../../types/messages" +import { configMessage } from "../../utils/open-config" export interface SettingsProps { tab?: string @@ -66,34 +67,7 @@ const Settings: Component = (props) => { } const open = (scope: "local" | "global") => { - const label = - scope === "global" ? language.t("settings.config.scope.global") : language.t("settings.config.scope.local") - vscode.postMessage({ - type: "openConfigFile", - scope, - labels: { - scope: label, - statusLoaded: language.t("settings.config.status.loaded"), - statusLoadedLegacy: language.t("settings.config.status.loadedLegacy"), - statusNotLoaded: language.t("settings.config.status.notLoaded"), - statusCreate: language.t("settings.config.status.create"), - title: language.t("settings.config.title", { scope: label }), - placeholder: language.t("settings.config.placeholder"), - noWorkspace: language.t("settings.config.noWorkspace"), - openFailed: language.t("settings.config.openFailed", { scope: label, message: "{{message}}" }), - sourceXdg: language.t("settings.config.source.xdg"), - sourceHomeKilo: language.t("settings.config.source.homeKilo"), - sourceHomeKilocode: language.t("settings.config.source.homeKilocode"), - sourceHomeOpencode: language.t("settings.config.source.homeOpencode"), - sourceEnvFile: language.t("settings.config.source.envFile"), - sourceEnvDir: language.t("settings.config.source.envDir"), - sourceEnvContent: language.t("settings.config.source.envContent"), - sourceProjectKilo: language.t("settings.config.source.projectKilo"), - sourceProjectRoot: language.t("settings.config.source.projectRoot"), - sourceProjectKilocode: language.t("settings.config.source.projectKilocode"), - sourceProjectOpencode: language.t("settings.config.source.projectOpencode"), - }, - }) + vscode.postMessage(configMessage(scope, language.t)) } // Sync when the parent changes the tab prop (e.g. via navigate message) diff --git a/packages/kilo-vscode/webview-ui/src/i18n/ar.ts b/packages/kilo-vscode/webview-ui/src/i18n/ar.ts index 9a3310b6555..4e8295ad13d 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/ar.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/ar.ts @@ -443,44 +443,6 @@ export const dict = { "provider.custom.models.name.placeholder": "الاسم المعروض", "provider.custom.models.reasoning.label": "الاستدلال", "provider.custom.models.modalities.image": "صورة", - "provider.custom.models.variants.label": "المتغيرات", - "provider.custom.models.variants.add": "إضافة متغير", - "provider.custom.models.variants.remove": "إزالة المتغير", - "provider.custom.models.variants.name.label": "الاسم", - "provider.custom.models.variants.name.placeholder": "على سبيل المثال: thinking", - "provider.custom.models.variants.option.unset": "(غير محدد)", - "provider.custom.models.variants.enableThinking.label": "تمكين التفكير (مثل Alibaba)", - "provider.custom.models.variants.enableThinking.placeholder": "enable_thinking", - "provider.custom.models.variants.enableThinking.true": "true", - "provider.custom.models.variants.enableThinking.false": "false", - "provider.custom.models.variants.thinking.label": "نوع التفكير (مثل Z.ai)", - "provider.custom.models.variants.thinking.placeholder": "thinking", - "provider.custom.models.variants.thinking.enabled": "enabled", - "provider.custom.models.variants.thinking.disabled": "disabled", - "provider.custom.models.variants.thinking.adaptive": "adaptive", - "provider.custom.models.variants.splitReasoning.label": "Split reasoning (required for e.g. MiniMax)", - "provider.custom.models.variants.splitReasoning.placeholder": "reasoning_split", - "provider.custom.models.variants.splitReasoning.true": "true", - "provider.custom.models.variants.splitReasoning.false": "false", - "provider.custom.models.variants.chatTemplateArgs.label": "تفعيل التفكير عبر وسائط قالب الدردشة (مثل Hugging Face)", - "provider.custom.models.variants.chatTemplateArgs.placeholder": "chat_template_args", - "provider.custom.models.variants.chatTemplateArgs.true": "true", - "provider.custom.models.variants.chatTemplateArgs.false": "false", - "provider.custom.models.variants.reasoningEffort.label": "جهد الاستدلال", - "provider.custom.models.variants.reasoningEffort.placeholder": "reasoningEffort", - "provider.custom.models.variants.reasoningEffort.none": "none", - "provider.custom.models.variants.reasoningEffort.minimal": "minimal", - "provider.custom.models.variants.reasoningEffort.low": "low", - "provider.custom.models.variants.reasoningEffort.medium": "medium", - "provider.custom.models.variants.reasoningEffort.high": "high", - "provider.custom.models.variants.reasoningEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.label": "Output effort (e.g. Anthropic)", - "provider.custom.models.variants.outputEffort.placeholder": "effort", - "provider.custom.models.variants.outputEffort.low": "low", - "provider.custom.models.variants.outputEffort.medium": "medium", - "provider.custom.models.variants.outputEffort.high": "high", - "provider.custom.models.variants.outputEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.max": "max", "provider.custom.models.remove": "إزالة النموذج", "provider.custom.models.add": "إضافة نموذج", "provider.custom.models.fetch.authError": "فشلت المصادقة. تحقق من مفتاح API أعلاه وحاول مرة أخرى.", @@ -494,6 +456,7 @@ export const dict = { "provider.custom.models.fetch.search": "البحث في النماذج\u2026", "provider.custom.models.fetch.add": "إضافة {{count}} نموذج(نماذج)", "provider.custom.edit.title": "تعديل المزود", + "provider.custom.edit.advanced": "تحرير الإعدادات المتقدمة في ملف إعداد JSON", "provider.custom.headers.label": "الرؤوس (اختياري)", "provider.custom.headers.key.label": "الرأس", "provider.custom.headers.key.placeholder": "Header-Name", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/br.ts b/packages/kilo-vscode/webview-ui/src/i18n/br.ts index 0df91b651c9..8e825534964 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/br.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/br.ts @@ -454,45 +454,6 @@ export const dict = { "provider.custom.models.name.placeholder": "Nome de Exibição", "provider.custom.models.reasoning.label": "Raciocínio", "provider.custom.models.modalities.image": "Imagem", - "provider.custom.models.variants.label": "Variantes", - "provider.custom.models.variants.add": "Adicionar variante", - "provider.custom.models.variants.remove": "Remover variante", - "provider.custom.models.variants.name.label": "Nome", - "provider.custom.models.variants.name.placeholder": "ex. thinking", - "provider.custom.models.variants.option.unset": "(não definido)", - "provider.custom.models.variants.enableThinking.label": "Ativar pensamento (ex. Alibaba)", - "provider.custom.models.variants.enableThinking.placeholder": "enable_thinking", - "provider.custom.models.variants.enableThinking.true": "true", - "provider.custom.models.variants.enableThinking.false": "false", - "provider.custom.models.variants.thinking.label": "Tipo de pensamento (ex. Z.ai)", - "provider.custom.models.variants.thinking.placeholder": "thinking", - "provider.custom.models.variants.thinking.enabled": "enabled", - "provider.custom.models.variants.thinking.disabled": "disabled", - "provider.custom.models.variants.thinking.adaptive": "adaptive", - "provider.custom.models.variants.splitReasoning.label": "Split reasoning (required for e.g. MiniMax)", - "provider.custom.models.variants.splitReasoning.placeholder": "reasoning_split", - "provider.custom.models.variants.splitReasoning.true": "true", - "provider.custom.models.variants.splitReasoning.false": "false", - "provider.custom.models.variants.chatTemplateArgs.label": - "Ativar pensamento via args do template de chat (ex. Hugging Face)", - "provider.custom.models.variants.chatTemplateArgs.placeholder": "chat_template_args", - "provider.custom.models.variants.chatTemplateArgs.true": "true", - "provider.custom.models.variants.chatTemplateArgs.false": "false", - "provider.custom.models.variants.reasoningEffort.label": "Esforço de raciocínio", - "provider.custom.models.variants.reasoningEffort.placeholder": "reasoningEffort", - "provider.custom.models.variants.reasoningEffort.none": "none", - "provider.custom.models.variants.reasoningEffort.minimal": "minimal", - "provider.custom.models.variants.reasoningEffort.low": "low", - "provider.custom.models.variants.reasoningEffort.medium": "medium", - "provider.custom.models.variants.reasoningEffort.high": "high", - "provider.custom.models.variants.reasoningEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.label": "Output effort (e.g. Anthropic)", - "provider.custom.models.variants.outputEffort.placeholder": "effort", - "provider.custom.models.variants.outputEffort.low": "low", - "provider.custom.models.variants.outputEffort.medium": "medium", - "provider.custom.models.variants.outputEffort.high": "high", - "provider.custom.models.variants.outputEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.max": "max", "provider.custom.models.remove": "Remover modelo", "provider.custom.models.add": "Adicionar modelo", "provider.custom.models.fetch.authError": "Falha na autenticação. Verifique a chave de API acima e tente novamente.", @@ -506,6 +467,7 @@ export const dict = { "provider.custom.models.fetch.search": "Pesquisar modelos\u2026", "provider.custom.models.fetch.add": "Adicionar {{count}} modelo(s)", "provider.custom.edit.title": "Editar provedor", + "provider.custom.edit.advanced": "Editar configurações avançadas no arquivo de configuração JSON", "provider.custom.headers.label": "Headers (opcional)", "provider.custom.headers.key.label": "Cabeçalho", "provider.custom.headers.key.placeholder": "Header-Name", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/bs.ts b/packages/kilo-vscode/webview-ui/src/i18n/bs.ts index db0f4590145..36817205996 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/bs.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/bs.ts @@ -496,45 +496,6 @@ export const dict = { "provider.custom.models.name.placeholder": "Naziv za prikaz", "provider.custom.models.reasoning.label": "Zaključivanje", "provider.custom.models.modalities.image": "Slika", - "provider.custom.models.variants.label": "Varijante", - "provider.custom.models.variants.add": "Dodaj varijantu", - "provider.custom.models.variants.remove": "Ukloni varijantu", - "provider.custom.models.variants.name.label": "Ime", - "provider.custom.models.variants.name.placeholder": "npr. thinking", - "provider.custom.models.variants.option.unset": "(nije postavljeno)", - "provider.custom.models.variants.enableThinking.label": "Omogući razmišljanje (npr. Alibaba)", - "provider.custom.models.variants.enableThinking.placeholder": "enable_thinking", - "provider.custom.models.variants.enableThinking.true": "true", - "provider.custom.models.variants.enableThinking.false": "false", - "provider.custom.models.variants.thinking.label": "Vrsta razmišljanja (npr. Z.ai)", - "provider.custom.models.variants.thinking.placeholder": "thinking", - "provider.custom.models.variants.thinking.enabled": "enabled", - "provider.custom.models.variants.thinking.disabled": "disabled", - "provider.custom.models.variants.thinking.adaptive": "adaptive", - "provider.custom.models.variants.splitReasoning.label": "Split reasoning (required for e.g. MiniMax)", - "provider.custom.models.variants.splitReasoning.placeholder": "reasoning_split", - "provider.custom.models.variants.splitReasoning.true": "true", - "provider.custom.models.variants.splitReasoning.false": "false", - "provider.custom.models.variants.chatTemplateArgs.label": - "Omogući razmišljanje preko argumenata chat predloška (npr. Hugging Face)", - "provider.custom.models.variants.chatTemplateArgs.placeholder": "chat_template_args", - "provider.custom.models.variants.chatTemplateArgs.true": "true", - "provider.custom.models.variants.chatTemplateArgs.false": "false", - "provider.custom.models.variants.reasoningEffort.label": "Napor zaključivanja", - "provider.custom.models.variants.reasoningEffort.placeholder": "reasoningEffort", - "provider.custom.models.variants.reasoningEffort.none": "none", - "provider.custom.models.variants.reasoningEffort.minimal": "minimal", - "provider.custom.models.variants.reasoningEffort.low": "low", - "provider.custom.models.variants.reasoningEffort.medium": "medium", - "provider.custom.models.variants.reasoningEffort.high": "high", - "provider.custom.models.variants.reasoningEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.label": "Output effort (e.g. Anthropic)", - "provider.custom.models.variants.outputEffort.placeholder": "effort", - "provider.custom.models.variants.outputEffort.low": "low", - "provider.custom.models.variants.outputEffort.medium": "medium", - "provider.custom.models.variants.outputEffort.high": "high", - "provider.custom.models.variants.outputEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.max": "max", "provider.custom.models.remove": "Ukloni model", "provider.custom.models.add": "Dodaj model", "provider.custom.models.fetch.authError": @@ -549,6 +510,7 @@ export const dict = { "provider.custom.models.fetch.search": "Pretraži modele\u2026", "provider.custom.models.fetch.add": "Dodaj {{count}} model(a)", "provider.custom.edit.title": "Uredi provajdera", + "provider.custom.edit.advanced": "Uredite napredne postavke u JSON konfiguracijskoj datoteci", "provider.custom.headers.label": "Zaglavlja (opcionalno)", "provider.custom.headers.key.label": "Zaglavlje", "provider.custom.headers.key.placeholder": "Header-Name", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/da.ts b/packages/kilo-vscode/webview-ui/src/i18n/da.ts index 6f36adc3d33..af7a402f188 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/da.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/da.ts @@ -494,45 +494,6 @@ export const dict = { "provider.custom.models.name.placeholder": "Visningsnavn", "provider.custom.models.reasoning.label": "Ræsonnement", "provider.custom.models.modalities.image": "Billede", - "provider.custom.models.variants.label": "Varianter", - "provider.custom.models.variants.add": "Tilføj variant", - "provider.custom.models.variants.remove": "Fjern variant", - "provider.custom.models.variants.name.label": "Navn", - "provider.custom.models.variants.name.placeholder": "f.eks. thinking", - "provider.custom.models.variants.option.unset": "(ikke angivet)", - "provider.custom.models.variants.enableThinking.label": "Aktivér tænkning (f.eks. Alibaba)", - "provider.custom.models.variants.enableThinking.placeholder": "enable_thinking", - "provider.custom.models.variants.enableThinking.true": "true", - "provider.custom.models.variants.enableThinking.false": "false", - "provider.custom.models.variants.thinking.label": "Tænkningstype (f.eks. Z.ai)", - "provider.custom.models.variants.thinking.placeholder": "thinking", - "provider.custom.models.variants.thinking.enabled": "enabled", - "provider.custom.models.variants.thinking.disabled": "disabled", - "provider.custom.models.variants.thinking.adaptive": "adaptive", - "provider.custom.models.variants.splitReasoning.label": "Split reasoning (required for e.g. MiniMax)", - "provider.custom.models.variants.splitReasoning.placeholder": "reasoning_split", - "provider.custom.models.variants.splitReasoning.true": "true", - "provider.custom.models.variants.splitReasoning.false": "false", - "provider.custom.models.variants.chatTemplateArgs.label": - "Aktivér tænkning via chat-skabelonargs (f.eks. Hugging Face)", - "provider.custom.models.variants.chatTemplateArgs.placeholder": "chat_template_args", - "provider.custom.models.variants.chatTemplateArgs.true": "true", - "provider.custom.models.variants.chatTemplateArgs.false": "false", - "provider.custom.models.variants.reasoningEffort.label": "Ræsonnementsindsats", - "provider.custom.models.variants.reasoningEffort.placeholder": "reasoningEffort", - "provider.custom.models.variants.reasoningEffort.none": "none", - "provider.custom.models.variants.reasoningEffort.minimal": "minimal", - "provider.custom.models.variants.reasoningEffort.low": "low", - "provider.custom.models.variants.reasoningEffort.medium": "medium", - "provider.custom.models.variants.reasoningEffort.high": "high", - "provider.custom.models.variants.reasoningEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.label": "Output effort (e.g. Anthropic)", - "provider.custom.models.variants.outputEffort.placeholder": "effort", - "provider.custom.models.variants.outputEffort.low": "low", - "provider.custom.models.variants.outputEffort.medium": "medium", - "provider.custom.models.variants.outputEffort.high": "high", - "provider.custom.models.variants.outputEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.max": "max", "provider.custom.models.remove": "Fjern model", "provider.custom.models.add": "Tilføj model", "provider.custom.models.fetch.authError": "Godkendelse mislykkedes. Kontrollér API-nøglen ovenfor, og prøv igen.", @@ -546,6 +507,7 @@ export const dict = { "provider.custom.models.fetch.search": "Søg modeller\u2026", "provider.custom.models.fetch.add": "Tilføj {{count}} model(ler)", "provider.custom.edit.title": "Rediger udbyder", + "provider.custom.edit.advanced": "Rediger avancerede indstillinger i JSON-konfigurationsfilen", "provider.custom.headers.label": "Headers (valgfrit)", "provider.custom.headers.key.label": "Header", "provider.custom.headers.key.placeholder": "Header-Name", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/de.ts b/packages/kilo-vscode/webview-ui/src/i18n/de.ts index 4066d9396d9..3bd2234ee43 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/de.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/de.ts @@ -504,45 +504,6 @@ export const dict = { "provider.custom.models.name.placeholder": "Anzeigename", "provider.custom.models.reasoning.label": "Schlussfolgerung", "provider.custom.models.modalities.image": "Bild", - "provider.custom.models.variants.label": "Varianten", - "provider.custom.models.variants.add": "Variante hinzufügen", - "provider.custom.models.variants.remove": "Variante entfernen", - "provider.custom.models.variants.name.label": "Name", - "provider.custom.models.variants.name.placeholder": "z.B. thinking", - "provider.custom.models.variants.option.unset": "(nicht festgelegt)", - "provider.custom.models.variants.enableThinking.label": "Nachdenken aktivieren (z.B. Alibaba)", - "provider.custom.models.variants.enableThinking.placeholder": "enable_thinking", - "provider.custom.models.variants.enableThinking.true": "true", - "provider.custom.models.variants.enableThinking.false": "false", - "provider.custom.models.variants.thinking.label": "Art des Nachdenkens (z.B. Z.ai)", - "provider.custom.models.variants.thinking.placeholder": "thinking", - "provider.custom.models.variants.thinking.enabled": "enabled", - "provider.custom.models.variants.thinking.disabled": "disabled", - "provider.custom.models.variants.thinking.adaptive": "adaptive", - "provider.custom.models.variants.splitReasoning.label": "Split reasoning (required for e.g. MiniMax)", - "provider.custom.models.variants.splitReasoning.placeholder": "reasoning_split", - "provider.custom.models.variants.splitReasoning.true": "true", - "provider.custom.models.variants.splitReasoning.false": "false", - "provider.custom.models.variants.chatTemplateArgs.label": - "Nachdenken über Chat-Vorlagenargumente aktivieren (z.B. Hugging Face)", - "provider.custom.models.variants.chatTemplateArgs.placeholder": "chat_template_args", - "provider.custom.models.variants.chatTemplateArgs.true": "true", - "provider.custom.models.variants.chatTemplateArgs.false": "false", - "provider.custom.models.variants.reasoningEffort.label": "Reasoning-Aufwand", - "provider.custom.models.variants.reasoningEffort.placeholder": "reasoningEffort", - "provider.custom.models.variants.reasoningEffort.none": "none", - "provider.custom.models.variants.reasoningEffort.minimal": "minimal", - "provider.custom.models.variants.reasoningEffort.low": "low", - "provider.custom.models.variants.reasoningEffort.medium": "medium", - "provider.custom.models.variants.reasoningEffort.high": "high", - "provider.custom.models.variants.reasoningEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.label": "Output effort (e.g. Anthropic)", - "provider.custom.models.variants.outputEffort.placeholder": "effort", - "provider.custom.models.variants.outputEffort.low": "low", - "provider.custom.models.variants.outputEffort.medium": "medium", - "provider.custom.models.variants.outputEffort.high": "high", - "provider.custom.models.variants.outputEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.max": "max", "provider.custom.models.remove": "Modell entfernen", "provider.custom.models.add": "Modell hinzufügen", "provider.custom.models.fetch.authError": @@ -557,6 +518,7 @@ export const dict = { "provider.custom.models.fetch.search": "Modelle suchen\u2026", "provider.custom.models.fetch.add": "{{count}} Modell(e) hinzufügen", "provider.custom.edit.title": "Anbieter bearbeiten", + "provider.custom.edit.advanced": "Erweiterte Einstellungen in der JSON-Konfigurationsdatei bearbeiten", "provider.custom.headers.label": "Header (optional)", "provider.custom.headers.key.label": "Kopfzeile", "provider.custom.headers.key.placeholder": "Header-Name", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/en.ts b/packages/kilo-vscode/webview-ui/src/i18n/en.ts index 80f804d969d..637305d8f22 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/en.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/en.ts @@ -408,45 +408,6 @@ export const dict = { "provider.custom.models.name.placeholder": "Display Name", "provider.custom.models.reasoning.label": "Reasoning", "provider.custom.models.modalities.image": "Image", - "provider.custom.models.variants.label": "Variants", - "provider.custom.models.variants.add": "Add variant", - "provider.custom.models.variants.remove": "Remove variant", - "provider.custom.models.variants.name.label": "Name", - "provider.custom.models.variants.name.placeholder": "e.g. thinking", - "provider.custom.models.variants.option.unset": "(not set)", - "provider.custom.models.variants.enableThinking.label": "Enable thinking (e.g. Alibaba)", - "provider.custom.models.variants.enableThinking.placeholder": "enable_thinking", - "provider.custom.models.variants.enableThinking.true": "true", - "provider.custom.models.variants.enableThinking.false": "false", - "provider.custom.models.variants.thinking.label": "Thinking type (e.g. Z.ai)", - "provider.custom.models.variants.thinking.placeholder": "thinking", - "provider.custom.models.variants.thinking.enabled": "enabled", - "provider.custom.models.variants.thinking.disabled": "disabled", - "provider.custom.models.variants.thinking.adaptive": "adaptive", - "provider.custom.models.variants.splitReasoning.label": "Split reasoning (required for e.g. MiniMax)", - "provider.custom.models.variants.splitReasoning.placeholder": "reasoning_split", - "provider.custom.models.variants.splitReasoning.true": "true", - "provider.custom.models.variants.splitReasoning.false": "false", - "provider.custom.models.variants.chatTemplateArgs.label": - "Enable thinking via chat template args (e.g. Hugging Face)", - "provider.custom.models.variants.chatTemplateArgs.placeholder": "chat_template_args", - "provider.custom.models.variants.chatTemplateArgs.true": "true", - "provider.custom.models.variants.chatTemplateArgs.false": "false", - "provider.custom.models.variants.reasoningEffort.label": "Reasoning effort", - "provider.custom.models.variants.reasoningEffort.placeholder": "reasoningEffort", - "provider.custom.models.variants.reasoningEffort.none": "none", - "provider.custom.models.variants.reasoningEffort.minimal": "minimal", - "provider.custom.models.variants.reasoningEffort.low": "low", - "provider.custom.models.variants.reasoningEffort.medium": "medium", - "provider.custom.models.variants.reasoningEffort.high": "high", - "provider.custom.models.variants.reasoningEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.label": "Output effort (e.g. Anthropic)", - "provider.custom.models.variants.outputEffort.placeholder": "effort", - "provider.custom.models.variants.outputEffort.low": "low", - "provider.custom.models.variants.outputEffort.medium": "medium", - "provider.custom.models.variants.outputEffort.high": "high", - "provider.custom.models.variants.outputEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.max": "max", "provider.custom.models.remove": "Remove model", "provider.custom.models.add": "Add model", "provider.custom.models.fetch.authError": "Authentication failed. Check the API key above and try again.", @@ -460,6 +421,7 @@ export const dict = { "provider.custom.models.fetch.search": "Search models\u2026", "provider.custom.models.fetch.add": "Add {{count}} model(s)", "provider.custom.edit.title": "Edit provider", + "provider.custom.edit.advanced": "Edit advanced settings in the JSON config file", "provider.custom.headers.label": "Headers (optional)", "provider.custom.headers.key.label": "Header", "provider.custom.headers.key.placeholder": "Header-Name", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/es.ts b/packages/kilo-vscode/webview-ui/src/i18n/es.ts index 558eb4a26ae..60816982138 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/es.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/es.ts @@ -497,45 +497,6 @@ export const dict = { "provider.custom.models.name.placeholder": "Nombre para mostrar", "provider.custom.models.reasoning.label": "Razonamiento", "provider.custom.models.modalities.image": "Imagen", - "provider.custom.models.variants.label": "Variantes", - "provider.custom.models.variants.add": "Añadir variante", - "provider.custom.models.variants.remove": "Eliminar variante", - "provider.custom.models.variants.name.label": "Nombre", - "provider.custom.models.variants.name.placeholder": "p. ej. thinking", - "provider.custom.models.variants.option.unset": "(no establecido)", - "provider.custom.models.variants.enableThinking.label": "Habilitar pensamiento (p. ej. Alibaba)", - "provider.custom.models.variants.enableThinking.placeholder": "enable_thinking", - "provider.custom.models.variants.enableThinking.true": "true", - "provider.custom.models.variants.enableThinking.false": "false", - "provider.custom.models.variants.thinking.label": "Tipo de pensamiento (p. ej. Z.ai)", - "provider.custom.models.variants.thinking.placeholder": "thinking", - "provider.custom.models.variants.thinking.enabled": "enabled", - "provider.custom.models.variants.thinking.disabled": "disabled", - "provider.custom.models.variants.thinking.adaptive": "adaptive", - "provider.custom.models.variants.splitReasoning.label": "Split reasoning (required for e.g. MiniMax)", - "provider.custom.models.variants.splitReasoning.placeholder": "reasoning_split", - "provider.custom.models.variants.splitReasoning.true": "true", - "provider.custom.models.variants.splitReasoning.false": "false", - "provider.custom.models.variants.chatTemplateArgs.label": - "Activar pensamiento mediante args de plantilla de chat (ej. Hugging Face)", - "provider.custom.models.variants.chatTemplateArgs.placeholder": "chat_template_args", - "provider.custom.models.variants.chatTemplateArgs.true": "true", - "provider.custom.models.variants.chatTemplateArgs.false": "false", - "provider.custom.models.variants.reasoningEffort.label": "Esfuerzo de razonamiento", - "provider.custom.models.variants.reasoningEffort.placeholder": "reasoningEffort", - "provider.custom.models.variants.reasoningEffort.none": "none", - "provider.custom.models.variants.reasoningEffort.minimal": "minimal", - "provider.custom.models.variants.reasoningEffort.low": "low", - "provider.custom.models.variants.reasoningEffort.medium": "medium", - "provider.custom.models.variants.reasoningEffort.high": "high", - "provider.custom.models.variants.reasoningEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.label": "Output effort (e.g. Anthropic)", - "provider.custom.models.variants.outputEffort.placeholder": "effort", - "provider.custom.models.variants.outputEffort.low": "low", - "provider.custom.models.variants.outputEffort.medium": "medium", - "provider.custom.models.variants.outputEffort.high": "high", - "provider.custom.models.variants.outputEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.max": "max", "provider.custom.models.remove": "Eliminar modelo", "provider.custom.models.add": "Añadir modelo", "provider.custom.models.fetch.authError": @@ -550,6 +511,7 @@ export const dict = { "provider.custom.models.fetch.search": "Buscar modelos\u2026", "provider.custom.models.fetch.add": "Añadir {{count}} modelo(s)", "provider.custom.edit.title": "Editar proveedor", + "provider.custom.edit.advanced": "Editar la configuración avanzada en el archivo de configuración JSON", "provider.custom.headers.label": "Headers (opcional)", "provider.custom.headers.key.label": "Header", "provider.custom.headers.key.placeholder": "Header-Name", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/fa.ts b/packages/kilo-vscode/webview-ui/src/i18n/fa.ts index cda714862bc..2a6ac366bb9 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/fa.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/fa.ts @@ -409,45 +409,6 @@ export const dict = { "provider.custom.models.name.placeholder": "نام نمایشی", "provider.custom.models.reasoning.label": "استدلال", "provider.custom.models.modalities.image": "تصویر", - "provider.custom.models.variants.label": "نسخه‌های متغیر", - "provider.custom.models.variants.add": "افزودن نسخه متغیر", - "provider.custom.models.variants.remove": "حذف نسخه متغیر", - "provider.custom.models.variants.name.label": "نام", - "provider.custom.models.variants.name.placeholder": "مثلاً thinking", - "provider.custom.models.variants.option.unset": "(تنظیم نشده)", - "provider.custom.models.variants.enableThinking.label": "فعال‌سازی تفکر (مثلاً Alibaba)", - "provider.custom.models.variants.enableThinking.placeholder": "enable_thinking", - "provider.custom.models.variants.enableThinking.true": "true", - "provider.custom.models.variants.enableThinking.false": "false", - "provider.custom.models.variants.thinking.label": "نوع تفکر (مثلاً Z.ai)", - "provider.custom.models.variants.thinking.placeholder": "thinking", - "provider.custom.models.variants.thinking.enabled": "فعال", - "provider.custom.models.variants.thinking.disabled": "غیرفعال", - "provider.custom.models.variants.thinking.adaptive": "تطبیقی", - "provider.custom.models.variants.splitReasoning.label": "تقسیم استدلال (لازم برای مثلاً MiniMax)", - "provider.custom.models.variants.splitReasoning.placeholder": "reasoning_split", - "provider.custom.models.variants.splitReasoning.true": "true", - "provider.custom.models.variants.splitReasoning.false": "false", - "provider.custom.models.variants.chatTemplateArgs.label": - "فعال‌سازی تفکر از طریق آرگومان‌های قالب چت (مثلاً Hugging Face)", - "provider.custom.models.variants.chatTemplateArgs.placeholder": "chat_template_args", - "provider.custom.models.variants.chatTemplateArgs.true": "true", - "provider.custom.models.variants.chatTemplateArgs.false": "false", - "provider.custom.models.variants.reasoningEffort.label": "سطح استدلال", - "provider.custom.models.variants.reasoningEffort.placeholder": "reasoningEffort", - "provider.custom.models.variants.reasoningEffort.none": "هیچ", - "provider.custom.models.variants.reasoningEffort.minimal": "حداقل", - "provider.custom.models.variants.reasoningEffort.low": "کم", - "provider.custom.models.variants.reasoningEffort.medium": "متوسط", - "provider.custom.models.variants.reasoningEffort.high": "زیاد", - "provider.custom.models.variants.reasoningEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.label": "تلاش خروجی (مثلاً Anthropic)", - "provider.custom.models.variants.outputEffort.placeholder": "تلاش", - "provider.custom.models.variants.outputEffort.low": "کم", - "provider.custom.models.variants.outputEffort.medium": "متوسط", - "provider.custom.models.variants.outputEffort.high": "زیاد", - "provider.custom.models.variants.outputEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.max": "حداکثر", "provider.custom.models.remove": "حذف مدل", "provider.custom.models.add": "افزودن مدل", "provider.custom.models.fetch.authError": "احراز هویت ناموفق بود. کلید API بالا را بررسی کرده و دوباره امتحان کنید.", @@ -461,6 +422,7 @@ export const dict = { "provider.custom.models.fetch.search": "جستجوی مدل‌ها…", "provider.custom.models.fetch.add": "افزودن {{count}} مدل", "provider.custom.edit.title": "ویرایش ارائه‌دهنده", + "provider.custom.edit.advanced": "ویرایش تنظیمات پیشرفته در فایل پیکربندی JSON", "provider.custom.headers.label": "هدرها (اختیاری)", "provider.custom.headers.key.label": "هدر", "provider.custom.headers.key.placeholder": "Header-Name", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/fr.ts b/packages/kilo-vscode/webview-ui/src/i18n/fr.ts index 0292d8767a9..e1957ba7500 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/fr.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/fr.ts @@ -498,45 +498,6 @@ export const dict = { "provider.custom.models.name.placeholder": "Nom d'affichage", "provider.custom.models.reasoning.label": "Raisonnement", "provider.custom.models.modalities.image": "Image", - "provider.custom.models.variants.label": "Variantes", - "provider.custom.models.variants.add": "Ajouter une variante", - "provider.custom.models.variants.remove": "Supprimer la variante", - "provider.custom.models.variants.name.label": "Nom", - "provider.custom.models.variants.name.placeholder": "ex. thinking", - "provider.custom.models.variants.option.unset": "(non défini)", - "provider.custom.models.variants.enableThinking.label": "Activer la réflexion (ex. Alibaba)", - "provider.custom.models.variants.enableThinking.placeholder": "enable_thinking", - "provider.custom.models.variants.enableThinking.true": "true", - "provider.custom.models.variants.enableThinking.false": "false", - "provider.custom.models.variants.thinking.label": "Type de réflexion (ex. Z.ai)", - "provider.custom.models.variants.thinking.placeholder": "thinking", - "provider.custom.models.variants.thinking.enabled": "enabled", - "provider.custom.models.variants.thinking.disabled": "disabled", - "provider.custom.models.variants.thinking.adaptive": "adaptive", - "provider.custom.models.variants.splitReasoning.label": "Split reasoning (required for e.g. MiniMax)", - "provider.custom.models.variants.splitReasoning.placeholder": "reasoning_split", - "provider.custom.models.variants.splitReasoning.true": "true", - "provider.custom.models.variants.splitReasoning.false": "false", - "provider.custom.models.variants.chatTemplateArgs.label": - "Activer la réflexion via les args du modèle de chat (ex. Hugging Face)", - "provider.custom.models.variants.chatTemplateArgs.placeholder": "chat_template_args", - "provider.custom.models.variants.chatTemplateArgs.true": "true", - "provider.custom.models.variants.chatTemplateArgs.false": "false", - "provider.custom.models.variants.reasoningEffort.label": "Effort de raisonnement", - "provider.custom.models.variants.reasoningEffort.placeholder": "reasoningEffort", - "provider.custom.models.variants.reasoningEffort.none": "none", - "provider.custom.models.variants.reasoningEffort.minimal": "minimal", - "provider.custom.models.variants.reasoningEffort.low": "low", - "provider.custom.models.variants.reasoningEffort.medium": "medium", - "provider.custom.models.variants.reasoningEffort.high": "high", - "provider.custom.models.variants.reasoningEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.label": "Output effort (e.g. Anthropic)", - "provider.custom.models.variants.outputEffort.placeholder": "effort", - "provider.custom.models.variants.outputEffort.low": "low", - "provider.custom.models.variants.outputEffort.medium": "medium", - "provider.custom.models.variants.outputEffort.high": "high", - "provider.custom.models.variants.outputEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.max": "max", "provider.custom.models.remove": "Supprimer le modèle", "provider.custom.models.add": "Ajouter un modèle", "provider.custom.models.fetch.authError": "Échec de l'authentification. Vérifiez la clé API ci-dessus et réessayez.", @@ -550,6 +511,7 @@ export const dict = { "provider.custom.models.fetch.search": "Rechercher des modèles\u2026", "provider.custom.models.fetch.add": "Ajouter {{count}} modèle(s)", "provider.custom.edit.title": "Modifier le fournisseur", + "provider.custom.edit.advanced": "Modifier les paramètres avancés dans le fichier de configuration JSON", "provider.custom.headers.label": "En-têtes (optionnel)", "provider.custom.headers.key.label": "En-tête", "provider.custom.headers.key.placeholder": "Header-Name", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/it.ts b/packages/kilo-vscode/webview-ui/src/i18n/it.ts index 10ef2fd2dcb..3f804c4b4dd 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/it.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/it.ts @@ -318,45 +318,6 @@ export const dict = { "provider.custom.models.name.placeholder": "Nome visualizzato", "provider.custom.models.reasoning.label": "Reasoning", "provider.custom.models.modalities.image": "Immagine", - "provider.custom.models.variants.label": "Variants", - "provider.custom.models.variants.add": "Aggiungi variante", - "provider.custom.models.variants.remove": "Rimuovi variante", - "provider.custom.models.variants.name.label": "Nome", - "provider.custom.models.variants.name.placeholder": "es. thinking", - "provider.custom.models.variants.option.unset": "(non impostato)", - "provider.custom.models.variants.enableThinking.label": "Abilita thinking (es. Alibaba)", - "provider.custom.models.variants.enableThinking.placeholder": "enable_thinking", - "provider.custom.models.variants.enableThinking.true": "true", - "provider.custom.models.variants.enableThinking.false": "false", - "provider.custom.models.variants.thinking.label": "Tipo thinking (es. Z.ai)", - "provider.custom.models.variants.thinking.placeholder": "thinking", - "provider.custom.models.variants.thinking.enabled": "enabled", - "provider.custom.models.variants.thinking.disabled": "disabled", - "provider.custom.models.variants.thinking.adaptive": "adaptive", - "provider.custom.models.variants.splitReasoning.label": "Split reasoning (required for e.g. MiniMax)", - "provider.custom.models.variants.splitReasoning.placeholder": "reasoning_split", - "provider.custom.models.variants.splitReasoning.true": "true", - "provider.custom.models.variants.splitReasoning.false": "false", - "provider.custom.models.variants.chatTemplateArgs.label": - "Enable thinking via chat template args (e.g. Hugging Face)", - "provider.custom.models.variants.chatTemplateArgs.placeholder": "chat_template_args", - "provider.custom.models.variants.chatTemplateArgs.true": "true", - "provider.custom.models.variants.chatTemplateArgs.false": "false", - "provider.custom.models.variants.reasoningEffort.label": "Sforzo di ragionamento", - "provider.custom.models.variants.reasoningEffort.placeholder": "reasoningEffort", - "provider.custom.models.variants.reasoningEffort.none": "none", - "provider.custom.models.variants.reasoningEffort.minimal": "minimal", - "provider.custom.models.variants.reasoningEffort.low": "low", - "provider.custom.models.variants.reasoningEffort.medium": "medium", - "provider.custom.models.variants.reasoningEffort.high": "high", - "provider.custom.models.variants.reasoningEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.label": "Output effort (e.g. Anthropic)", - "provider.custom.models.variants.outputEffort.placeholder": "effort", - "provider.custom.models.variants.outputEffort.low": "low", - "provider.custom.models.variants.outputEffort.medium": "medium", - "provider.custom.models.variants.outputEffort.high": "high", - "provider.custom.models.variants.outputEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.max": "max", "provider.custom.models.remove": "Rimuovi modello", "provider.custom.models.add": "Aggiungi modello", "provider.custom.models.fetch.authError": "Autenticazione non riuscita. Controlla l'API key sopra e riprova.", @@ -370,6 +331,7 @@ export const dict = { "provider.custom.models.fetch.search": "Cerca modelli...", "provider.custom.models.fetch.add": "Aggiungi {{count}} modelli", "provider.custom.edit.title": "Modifica provider", + "provider.custom.edit.advanced": "Modifica le impostazioni avanzate nel file di configurazione JSON", "provider.custom.headers.label": "Header (opzionali)", "provider.custom.headers.key.label": "Header", "provider.custom.headers.key.placeholder": "Nome-Header", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/ja.ts b/packages/kilo-vscode/webview-ui/src/i18n/ja.ts index 67c60731ef5..36b3bb91cb3 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/ja.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/ja.ts @@ -490,44 +490,6 @@ export const dict = { "provider.custom.models.name.placeholder": "表示名", "provider.custom.models.reasoning.label": "推論", "provider.custom.models.modalities.image": "画像", - "provider.custom.models.variants.label": "バリアント", - "provider.custom.models.variants.add": "バリアントを追加", - "provider.custom.models.variants.remove": "バリアントを削除", - "provider.custom.models.variants.name.label": "名前", - "provider.custom.models.variants.name.placeholder": "例: thinking", - "provider.custom.models.variants.option.unset": "(未設定)", - "provider.custom.models.variants.enableThinking.label": "思考を有効にする (例: Alibaba)", - "provider.custom.models.variants.enableThinking.placeholder": "enable_thinking", - "provider.custom.models.variants.enableThinking.true": "true", - "provider.custom.models.variants.enableThinking.false": "false", - "provider.custom.models.variants.thinking.label": "思考タイプ (例: Z.ai)", - "provider.custom.models.variants.thinking.placeholder": "thinking", - "provider.custom.models.variants.thinking.enabled": "enabled", - "provider.custom.models.variants.thinking.disabled": "disabled", - "provider.custom.models.variants.thinking.adaptive": "adaptive", - "provider.custom.models.variants.splitReasoning.label": "Split reasoning (required for e.g. MiniMax)", - "provider.custom.models.variants.splitReasoning.placeholder": "reasoning_split", - "provider.custom.models.variants.splitReasoning.true": "true", - "provider.custom.models.variants.splitReasoning.false": "false", - "provider.custom.models.variants.chatTemplateArgs.label": "チャットテンプレート引数で思考を有効化 (例: Hugging Face)", - "provider.custom.models.variants.chatTemplateArgs.placeholder": "chat_template_args", - "provider.custom.models.variants.chatTemplateArgs.true": "true", - "provider.custom.models.variants.chatTemplateArgs.false": "false", - "provider.custom.models.variants.reasoningEffort.label": "推論エフォート", - "provider.custom.models.variants.reasoningEffort.placeholder": "reasoningEffort", - "provider.custom.models.variants.reasoningEffort.none": "none", - "provider.custom.models.variants.reasoningEffort.minimal": "minimal", - "provider.custom.models.variants.reasoningEffort.low": "low", - "provider.custom.models.variants.reasoningEffort.medium": "medium", - "provider.custom.models.variants.reasoningEffort.high": "high", - "provider.custom.models.variants.reasoningEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.label": "Output effort (e.g. Anthropic)", - "provider.custom.models.variants.outputEffort.placeholder": "effort", - "provider.custom.models.variants.outputEffort.low": "low", - "provider.custom.models.variants.outputEffort.medium": "medium", - "provider.custom.models.variants.outputEffort.high": "high", - "provider.custom.models.variants.outputEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.max": "max", "provider.custom.models.remove": "モデルを削除", "provider.custom.models.add": "モデルを追加", "provider.custom.models.fetch.authError": "認証に失敗しました。上記のAPIキーを確認して再試行してください。", @@ -541,6 +503,7 @@ export const dict = { "provider.custom.models.fetch.search": "モデルを検索\u2026", "provider.custom.models.fetch.add": "{{count}}個のモデルを追加", "provider.custom.edit.title": "プロバイダーを編集", + "provider.custom.edit.advanced": "JSON 設定ファイルで詳細設定を編集", "provider.custom.headers.label": "ヘッダー(任意)", "provider.custom.headers.key.label": "ヘッダー", "provider.custom.headers.key.placeholder": "Header-Name", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/ko.ts b/packages/kilo-vscode/webview-ui/src/i18n/ko.ts index e7d0664e7b7..ed69706294b 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/ko.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/ko.ts @@ -451,44 +451,6 @@ export const dict = { "provider.custom.models.name.placeholder": "표시 이름", "provider.custom.models.reasoning.label": "추론", "provider.custom.models.modalities.image": "이미지", - "provider.custom.models.variants.label": "변형", - "provider.custom.models.variants.add": "변형 추가", - "provider.custom.models.variants.remove": "변형 제거", - "provider.custom.models.variants.name.label": "이름", - "provider.custom.models.variants.name.placeholder": "예: thinking", - "provider.custom.models.variants.option.unset": "(설정되지 않음)", - "provider.custom.models.variants.enableThinking.label": "사고 활성화 (예: Alibaba)", - "provider.custom.models.variants.enableThinking.placeholder": "enable_thinking", - "provider.custom.models.variants.enableThinking.true": "true", - "provider.custom.models.variants.enableThinking.false": "false", - "provider.custom.models.variants.thinking.label": "사고 유형 (예: Z.ai)", - "provider.custom.models.variants.thinking.placeholder": "thinking", - "provider.custom.models.variants.thinking.enabled": "enabled", - "provider.custom.models.variants.thinking.disabled": "disabled", - "provider.custom.models.variants.thinking.adaptive": "adaptive", - "provider.custom.models.variants.splitReasoning.label": "Split reasoning (required for e.g. MiniMax)", - "provider.custom.models.variants.splitReasoning.placeholder": "reasoning_split", - "provider.custom.models.variants.splitReasoning.true": "true", - "provider.custom.models.variants.splitReasoning.false": "false", - "provider.custom.models.variants.chatTemplateArgs.label": "채팅 템플릿 인수로 사고 활성화 (예: Hugging Face)", - "provider.custom.models.variants.chatTemplateArgs.placeholder": "chat_template_args", - "provider.custom.models.variants.chatTemplateArgs.true": "true", - "provider.custom.models.variants.chatTemplateArgs.false": "false", - "provider.custom.models.variants.reasoningEffort.label": "추론 노력", - "provider.custom.models.variants.reasoningEffort.placeholder": "reasoningEffort", - "provider.custom.models.variants.reasoningEffort.none": "none", - "provider.custom.models.variants.reasoningEffort.minimal": "minimal", - "provider.custom.models.variants.reasoningEffort.low": "low", - "provider.custom.models.variants.reasoningEffort.medium": "medium", - "provider.custom.models.variants.reasoningEffort.high": "high", - "provider.custom.models.variants.reasoningEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.label": "Output effort (e.g. Anthropic)", - "provider.custom.models.variants.outputEffort.placeholder": "effort", - "provider.custom.models.variants.outputEffort.low": "low", - "provider.custom.models.variants.outputEffort.medium": "medium", - "provider.custom.models.variants.outputEffort.high": "high", - "provider.custom.models.variants.outputEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.max": "max", "provider.custom.models.remove": "모델 제거", "provider.custom.models.add": "모델 추가", "provider.custom.models.fetch.authError": "인증에 실패했습니다. 위의 API 키를 확인하고 다시 시도하세요.", @@ -502,6 +464,7 @@ export const dict = { "provider.custom.models.fetch.search": "모델 검색\u2026", "provider.custom.models.fetch.add": "{{count}}개 모델 추가", "provider.custom.edit.title": "공급자 편집", + "provider.custom.edit.advanced": "JSON 구성 파일에서 고급 설정 편집", "provider.custom.headers.label": "헤더 (선택사항)", "provider.custom.headers.key.label": "헤더", "provider.custom.headers.key.placeholder": "Header-Name", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/nl.ts b/packages/kilo-vscode/webview-ui/src/i18n/nl.ts index 40169d8672d..71ad69b7f7c 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/nl.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/nl.ts @@ -447,45 +447,6 @@ export const dict = { "provider.custom.models.name.placeholder": "Weergavenaam", "provider.custom.models.reasoning.label": "Redeneren", "provider.custom.models.modalities.image": "Afbeelding", - "provider.custom.models.variants.label": "Varianten", - "provider.custom.models.variants.add": "Variant toevoegen", - "provider.custom.models.variants.remove": "Variant verwijderen", - "provider.custom.models.variants.name.label": "Naam", - "provider.custom.models.variants.name.placeholder": "bijv. thinking", - "provider.custom.models.variants.option.unset": "(niet ingesteld)", - "provider.custom.models.variants.enableThinking.label": "Denken inschakelen (bijv. Alibaba)", - "provider.custom.models.variants.enableThinking.placeholder": "enable_thinking", - "provider.custom.models.variants.enableThinking.true": "true", - "provider.custom.models.variants.enableThinking.false": "false", - "provider.custom.models.variants.thinking.label": "Denktype (bijv. Z.ai)", - "provider.custom.models.variants.thinking.placeholder": "thinking", - "provider.custom.models.variants.thinking.enabled": "enabled", - "provider.custom.models.variants.thinking.disabled": "disabled", - "provider.custom.models.variants.thinking.adaptive": "adaptive", - "provider.custom.models.variants.splitReasoning.label": "Split reasoning (required for e.g. MiniMax)", - "provider.custom.models.variants.splitReasoning.placeholder": "reasoning_split", - "provider.custom.models.variants.splitReasoning.true": "true", - "provider.custom.models.variants.splitReasoning.false": "false", - "provider.custom.models.variants.chatTemplateArgs.label": - "Nadenken inschakelen via chat template args (bijv. Hugging Face)", - "provider.custom.models.variants.chatTemplateArgs.placeholder": "chat_template_args", - "provider.custom.models.variants.chatTemplateArgs.true": "true", - "provider.custom.models.variants.chatTemplateArgs.false": "false", - "provider.custom.models.variants.reasoningEffort.label": "Redeneerinspanning", - "provider.custom.models.variants.reasoningEffort.placeholder": "reasoningEffort", - "provider.custom.models.variants.reasoningEffort.none": "none", - "provider.custom.models.variants.reasoningEffort.minimal": "minimal", - "provider.custom.models.variants.reasoningEffort.low": "low", - "provider.custom.models.variants.reasoningEffort.medium": "medium", - "provider.custom.models.variants.reasoningEffort.high": "high", - "provider.custom.models.variants.reasoningEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.label": "Output effort (e.g. Anthropic)", - "provider.custom.models.variants.outputEffort.placeholder": "effort", - "provider.custom.models.variants.outputEffort.low": "low", - "provider.custom.models.variants.outputEffort.medium": "medium", - "provider.custom.models.variants.outputEffort.high": "high", - "provider.custom.models.variants.outputEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.max": "max", "provider.custom.models.remove": "Model verwijderen", "provider.custom.models.add": "Model toevoegen", "provider.custom.models.fetch.authError": @@ -500,6 +461,7 @@ export const dict = { "provider.custom.models.fetch.search": "Modellen zoeken\u2026", "provider.custom.models.fetch.add": "{{count}} model(len) toevoegen", "provider.custom.edit.title": "Provider bewerken", + "provider.custom.edit.advanced": "Geavanceerde instellingen bewerken in het JSON-configuratiebestand", "provider.custom.headers.label": "Headers (optioneel)", "provider.custom.headers.key.label": "Header", "provider.custom.headers.key.placeholder": "Header-Naam", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/no.ts b/packages/kilo-vscode/webview-ui/src/i18n/no.ts index bea79dee720..f2c3e5425e2 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/no.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/no.ts @@ -457,45 +457,6 @@ export const dict = { "provider.custom.models.name.placeholder": "Visningsnavn", "provider.custom.models.reasoning.label": "Resonnering", "provider.custom.models.modalities.image": "Bilde", - "provider.custom.models.variants.label": "Varianter", - "provider.custom.models.variants.add": "Legg til variant", - "provider.custom.models.variants.remove": "Fjern variant", - "provider.custom.models.variants.name.label": "Navn", - "provider.custom.models.variants.name.placeholder": "f.eks. thinking", - "provider.custom.models.variants.option.unset": "(ikke angitt)", - "provider.custom.models.variants.enableThinking.label": "Aktiver tenkning (f.eks. Alibaba)", - "provider.custom.models.variants.enableThinking.placeholder": "enable_thinking", - "provider.custom.models.variants.enableThinking.true": "true", - "provider.custom.models.variants.enableThinking.false": "false", - "provider.custom.models.variants.thinking.label": "Tenkningstype (f.eks. Z.ai)", - "provider.custom.models.variants.thinking.placeholder": "thinking", - "provider.custom.models.variants.thinking.enabled": "enabled", - "provider.custom.models.variants.thinking.disabled": "disabled", - "provider.custom.models.variants.thinking.adaptive": "adaptive", - "provider.custom.models.variants.splitReasoning.label": "Split reasoning (required for e.g. MiniMax)", - "provider.custom.models.variants.splitReasoning.placeholder": "reasoning_split", - "provider.custom.models.variants.splitReasoning.true": "true", - "provider.custom.models.variants.splitReasoning.false": "false", - "provider.custom.models.variants.chatTemplateArgs.label": - "Aktiver tenkning via chat-malargumenter (f.eks. Hugging Face)", - "provider.custom.models.variants.chatTemplateArgs.placeholder": "chat_template_args", - "provider.custom.models.variants.chatTemplateArgs.true": "true", - "provider.custom.models.variants.chatTemplateArgs.false": "false", - "provider.custom.models.variants.reasoningEffort.label": "Resonneringsinnsats", - "provider.custom.models.variants.reasoningEffort.placeholder": "reasoningEffort", - "provider.custom.models.variants.reasoningEffort.none": "none", - "provider.custom.models.variants.reasoningEffort.minimal": "minimal", - "provider.custom.models.variants.reasoningEffort.low": "low", - "provider.custom.models.variants.reasoningEffort.medium": "medium", - "provider.custom.models.variants.reasoningEffort.high": "high", - "provider.custom.models.variants.reasoningEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.label": "Output effort (e.g. Anthropic)", - "provider.custom.models.variants.outputEffort.placeholder": "effort", - "provider.custom.models.variants.outputEffort.low": "low", - "provider.custom.models.variants.outputEffort.medium": "medium", - "provider.custom.models.variants.outputEffort.high": "high", - "provider.custom.models.variants.outputEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.max": "max", "provider.custom.models.remove": "Fjern modell", "provider.custom.models.add": "Legg til modell", "provider.custom.models.fetch.authError": "Autentisering mislyktes. Sjekk API-nøkkelen ovenfor og prøv igjen.", @@ -509,6 +470,7 @@ export const dict = { "provider.custom.models.fetch.search": "Søk etter modeller\u2026", "provider.custom.models.fetch.add": "Legg til {{count}} modell(er)", "provider.custom.edit.title": "Rediger leverandør", + "provider.custom.edit.advanced": "Rediger avanserte innstillinger i JSON-konfigurasjonsfilen", "provider.custom.headers.label": "Headere (valgfritt)", "provider.custom.headers.key.label": "Header", "provider.custom.headers.key.placeholder": "Header-Name", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/pl.ts b/packages/kilo-vscode/webview-ui/src/i18n/pl.ts index 701c94122f9..e2048370847 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/pl.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/pl.ts @@ -452,45 +452,6 @@ export const dict = { "provider.custom.models.name.placeholder": "Nazwa wyświetlana", "provider.custom.models.reasoning.label": "Rozumowanie", "provider.custom.models.modalities.image": "Obraz", - "provider.custom.models.variants.label": "Warianty", - "provider.custom.models.variants.add": "Dodaj wariant", - "provider.custom.models.variants.remove": "Usuń wariant", - "provider.custom.models.variants.name.label": "Nazwa", - "provider.custom.models.variants.name.placeholder": "np. thinking", - "provider.custom.models.variants.option.unset": "(nie ustawiono)", - "provider.custom.models.variants.enableThinking.label": "Włącz myślenie (np. Alibaba)", - "provider.custom.models.variants.enableThinking.placeholder": "enable_thinking", - "provider.custom.models.variants.enableThinking.true": "true", - "provider.custom.models.variants.enableThinking.false": "false", - "provider.custom.models.variants.thinking.label": "Typ myślenia (np. Z.ai)", - "provider.custom.models.variants.thinking.placeholder": "thinking", - "provider.custom.models.variants.thinking.enabled": "enabled", - "provider.custom.models.variants.thinking.disabled": "disabled", - "provider.custom.models.variants.thinking.adaptive": "adaptive", - "provider.custom.models.variants.splitReasoning.label": "Split reasoning (required for e.g. MiniMax)", - "provider.custom.models.variants.splitReasoning.placeholder": "reasoning_split", - "provider.custom.models.variants.splitReasoning.true": "true", - "provider.custom.models.variants.splitReasoning.false": "false", - "provider.custom.models.variants.chatTemplateArgs.label": - "Włącz myślenie przez argumenty szablonu czatu (np. Hugging Face)", - "provider.custom.models.variants.chatTemplateArgs.placeholder": "chat_template_args", - "provider.custom.models.variants.chatTemplateArgs.true": "true", - "provider.custom.models.variants.chatTemplateArgs.false": "false", - "provider.custom.models.variants.reasoningEffort.label": "Wysiłek rozumowania", - "provider.custom.models.variants.reasoningEffort.placeholder": "reasoningEffort", - "provider.custom.models.variants.reasoningEffort.none": "none", - "provider.custom.models.variants.reasoningEffort.minimal": "minimal", - "provider.custom.models.variants.reasoningEffort.low": "low", - "provider.custom.models.variants.reasoningEffort.medium": "medium", - "provider.custom.models.variants.reasoningEffort.high": "high", - "provider.custom.models.variants.reasoningEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.label": "Output effort (e.g. Anthropic)", - "provider.custom.models.variants.outputEffort.placeholder": "effort", - "provider.custom.models.variants.outputEffort.low": "low", - "provider.custom.models.variants.outputEffort.medium": "medium", - "provider.custom.models.variants.outputEffort.high": "high", - "provider.custom.models.variants.outputEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.max": "max", "provider.custom.models.remove": "Usuń model", "provider.custom.models.add": "Dodaj model", "provider.custom.models.fetch.authError": @@ -505,6 +466,7 @@ export const dict = { "provider.custom.models.fetch.search": "Szukaj modeli\u2026", "provider.custom.models.fetch.add": "Dodaj {{count}} model(i)", "provider.custom.edit.title": "Edytuj dostawcę", + "provider.custom.edit.advanced": "Edytuj ustawienia zaawansowane w pliku konfiguracji JSON", "provider.custom.headers.label": "Nagłówki (opcjonalnie)", "provider.custom.headers.key.label": "Nagłówek", "provider.custom.headers.key.placeholder": "Header-Name", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/ru.ts b/packages/kilo-vscode/webview-ui/src/i18n/ru.ts index 9f64e84a176..b022005b489 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/ru.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/ru.ts @@ -491,45 +491,6 @@ export const dict = { "provider.custom.models.name.placeholder": "Отображаемое имя", "provider.custom.models.reasoning.label": "Рассуждение", "provider.custom.models.modalities.image": "Изображение", - "provider.custom.models.variants.label": "Варианты", - "provider.custom.models.variants.add": "Добавить вариант", - "provider.custom.models.variants.remove": "Удалить вариант", - "provider.custom.models.variants.name.label": "Имя", - "provider.custom.models.variants.name.placeholder": "напр. thinking", - "provider.custom.models.variants.option.unset": "(не задано)", - "provider.custom.models.variants.enableThinking.label": "Включить мышление (напр. Alibaba)", - "provider.custom.models.variants.enableThinking.placeholder": "enable_thinking", - "provider.custom.models.variants.enableThinking.true": "true", - "provider.custom.models.variants.enableThinking.false": "false", - "provider.custom.models.variants.thinking.label": "Тип мышления (напр. Z.ai)", - "provider.custom.models.variants.thinking.placeholder": "thinking", - "provider.custom.models.variants.thinking.enabled": "enabled", - "provider.custom.models.variants.thinking.disabled": "disabled", - "provider.custom.models.variants.thinking.adaptive": "adaptive", - "provider.custom.models.variants.splitReasoning.label": "Split reasoning (required for e.g. MiniMax)", - "provider.custom.models.variants.splitReasoning.placeholder": "reasoning_split", - "provider.custom.models.variants.splitReasoning.true": "true", - "provider.custom.models.variants.splitReasoning.false": "false", - "provider.custom.models.variants.chatTemplateArgs.label": - "Включить размышление через аргументы шаблона чата (напр. Hugging Face)", - "provider.custom.models.variants.chatTemplateArgs.placeholder": "chat_template_args", - "provider.custom.models.variants.chatTemplateArgs.true": "true", - "provider.custom.models.variants.chatTemplateArgs.false": "false", - "provider.custom.models.variants.reasoningEffort.label": "Усилие рассуждения", - "provider.custom.models.variants.reasoningEffort.placeholder": "reasoningEffort", - "provider.custom.models.variants.reasoningEffort.none": "none", - "provider.custom.models.variants.reasoningEffort.minimal": "minimal", - "provider.custom.models.variants.reasoningEffort.low": "low", - "provider.custom.models.variants.reasoningEffort.medium": "medium", - "provider.custom.models.variants.reasoningEffort.high": "high", - "provider.custom.models.variants.reasoningEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.label": "Output effort (e.g. Anthropic)", - "provider.custom.models.variants.outputEffort.placeholder": "effort", - "provider.custom.models.variants.outputEffort.low": "low", - "provider.custom.models.variants.outputEffort.medium": "medium", - "provider.custom.models.variants.outputEffort.high": "high", - "provider.custom.models.variants.outputEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.max": "max", "provider.custom.models.remove": "Удалить модель", "provider.custom.models.add": "Добавить модель", "provider.custom.models.fetch.authError": "Ошибка аутентификации. Проверьте API-ключ выше и попробуйте снова.", @@ -543,6 +504,7 @@ export const dict = { "provider.custom.models.fetch.search": "Поиск моделей\u2026", "provider.custom.models.fetch.add": "Добавить {{count}} модель(ей)", "provider.custom.edit.title": "Редактировать провайдера", + "provider.custom.edit.advanced": "Изменить расширенные настройки в файле конфигурации JSON", "provider.custom.headers.label": "Заголовки (необязательно)", "provider.custom.headers.key.label": "Заголовок", "provider.custom.headers.key.placeholder": "Header-Name", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/th.ts b/packages/kilo-vscode/webview-ui/src/i18n/th.ts index 5b0e38ddf14..189ae8e5b5e 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/th.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/th.ts @@ -488,45 +488,6 @@ export const dict = { "provider.custom.models.name.placeholder": "ชื่อที่แสดง", "provider.custom.models.reasoning.label": "การใช้เหตุผล", "provider.custom.models.modalities.image": "รูปภาพ", - "provider.custom.models.variants.label": "รูปแบบ", - "provider.custom.models.variants.add": "เพิ่มรูปแบบ", - "provider.custom.models.variants.remove": "ลบรูปแบบ", - "provider.custom.models.variants.name.label": "ชื่อ", - "provider.custom.models.variants.name.placeholder": "เช่น thinking", - "provider.custom.models.variants.option.unset": "(ไม่ได้ตั้งค่า)", - "provider.custom.models.variants.enableThinking.label": "เปิดใช้งานการคิด (เช่น Alibaba)", - "provider.custom.models.variants.enableThinking.placeholder": "enable_thinking", - "provider.custom.models.variants.enableThinking.true": "true", - "provider.custom.models.variants.enableThinking.false": "false", - "provider.custom.models.variants.thinking.label": "ประเภทการคิด (เช่น Z.ai)", - "provider.custom.models.variants.thinking.placeholder": "thinking", - "provider.custom.models.variants.thinking.enabled": "enabled", - "provider.custom.models.variants.thinking.disabled": "disabled", - "provider.custom.models.variants.thinking.adaptive": "adaptive", - "provider.custom.models.variants.splitReasoning.label": "Split reasoning (required for e.g. MiniMax)", - "provider.custom.models.variants.splitReasoning.placeholder": "reasoning_split", - "provider.custom.models.variants.splitReasoning.true": "true", - "provider.custom.models.variants.splitReasoning.false": "false", - "provider.custom.models.variants.chatTemplateArgs.label": - "เปิดใช้งานการคิดผ่านอาร์กิวเมนต์เทมเพลตแชท (เช่น Hugging Face)", - "provider.custom.models.variants.chatTemplateArgs.placeholder": "chat_template_args", - "provider.custom.models.variants.chatTemplateArgs.true": "true", - "provider.custom.models.variants.chatTemplateArgs.false": "false", - "provider.custom.models.variants.reasoningEffort.label": "ระดับการใช้เหตุผล", - "provider.custom.models.variants.reasoningEffort.placeholder": "reasoningEffort", - "provider.custom.models.variants.reasoningEffort.none": "none", - "provider.custom.models.variants.reasoningEffort.minimal": "minimal", - "provider.custom.models.variants.reasoningEffort.low": "low", - "provider.custom.models.variants.reasoningEffort.medium": "medium", - "provider.custom.models.variants.reasoningEffort.high": "high", - "provider.custom.models.variants.reasoningEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.label": "Output effort (e.g. Anthropic)", - "provider.custom.models.variants.outputEffort.placeholder": "effort", - "provider.custom.models.variants.outputEffort.low": "low", - "provider.custom.models.variants.outputEffort.medium": "medium", - "provider.custom.models.variants.outputEffort.high": "high", - "provider.custom.models.variants.outputEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.max": "max", "provider.custom.models.remove": "ลบโมเดล", "provider.custom.models.add": "เพิ่มโมเดล", "provider.custom.models.fetch.authError": "การยืนยันตัวตนล้มเหลว ตรวจสอบคีย์ API ด้านบนแล้วลองอีกครั้ง", @@ -540,6 +501,7 @@ export const dict = { "provider.custom.models.fetch.search": "ค้นหาโมเดล\u2026", "provider.custom.models.fetch.add": "เพิ่ม {{count}} โมเดล", "provider.custom.edit.title": "แก้ไขผู้ให้บริการ", + "provider.custom.edit.advanced": "แก้ไขการตั้งค่าขั้นสูงในไฟล์การกำหนดค่า JSON", "provider.custom.headers.label": "ส่วนหัว (ไม่จำเป็น)", "provider.custom.headers.key.label": "ส่วนหัว", "provider.custom.headers.key.placeholder": "Header-Name", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/tr.ts b/packages/kilo-vscode/webview-ui/src/i18n/tr.ts index 83a9d8f16ce..7c569cf1db9 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/tr.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/tr.ts @@ -442,45 +442,6 @@ export const dict = { "provider.custom.models.name.placeholder": "Görünen Ad", "provider.custom.models.reasoning.label": "Akıl Yürütme", "provider.custom.models.modalities.image": "Görüntü", - "provider.custom.models.variants.label": "Varyantlar", - "provider.custom.models.variants.add": "Varyant ekle", - "provider.custom.models.variants.remove": "Varyantı kaldır", - "provider.custom.models.variants.name.label": "Ad", - "provider.custom.models.variants.name.placeholder": "örn. thinking", - "provider.custom.models.variants.option.unset": "(ayarlanmadı)", - "provider.custom.models.variants.enableThinking.label": "Düşünmeyi etkinleştir (örn. Alibaba)", - "provider.custom.models.variants.enableThinking.placeholder": "enable_thinking", - "provider.custom.models.variants.enableThinking.true": "true", - "provider.custom.models.variants.enableThinking.false": "false", - "provider.custom.models.variants.thinking.label": "Düşünme türü (örn. Z.ai)", - "provider.custom.models.variants.thinking.placeholder": "thinking", - "provider.custom.models.variants.thinking.enabled": "enabled", - "provider.custom.models.variants.thinking.disabled": "disabled", - "provider.custom.models.variants.thinking.adaptive": "adaptive", - "provider.custom.models.variants.splitReasoning.label": "Split reasoning (required for e.g. MiniMax)", - "provider.custom.models.variants.splitReasoning.placeholder": "reasoning_split", - "provider.custom.models.variants.splitReasoning.true": "true", - "provider.custom.models.variants.splitReasoning.false": "false", - "provider.custom.models.variants.chatTemplateArgs.label": - "Sohbet şablonu argümanları ile düşünmeyi etkinleştir (ör. Hugging Face)", - "provider.custom.models.variants.chatTemplateArgs.placeholder": "chat_template_args", - "provider.custom.models.variants.chatTemplateArgs.true": "true", - "provider.custom.models.variants.chatTemplateArgs.false": "false", - "provider.custom.models.variants.reasoningEffort.label": "Akıl yürütme çabası", - "provider.custom.models.variants.reasoningEffort.placeholder": "reasoningEffort", - "provider.custom.models.variants.reasoningEffort.none": "none", - "provider.custom.models.variants.reasoningEffort.minimal": "minimal", - "provider.custom.models.variants.reasoningEffort.low": "low", - "provider.custom.models.variants.reasoningEffort.medium": "medium", - "provider.custom.models.variants.reasoningEffort.high": "high", - "provider.custom.models.variants.reasoningEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.label": "Output effort (e.g. Anthropic)", - "provider.custom.models.variants.outputEffort.placeholder": "effort", - "provider.custom.models.variants.outputEffort.low": "low", - "provider.custom.models.variants.outputEffort.medium": "medium", - "provider.custom.models.variants.outputEffort.high": "high", - "provider.custom.models.variants.outputEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.max": "max", "provider.custom.models.remove": "Modeli kaldır", "provider.custom.models.add": "Model ekle", "provider.custom.models.fetch.authError": @@ -495,6 +456,7 @@ export const dict = { "provider.custom.models.fetch.search": "Model ara\u2026", "provider.custom.models.fetch.add": "{{count}} model ekle", "provider.custom.edit.title": "Sağlayıcıyı düzenle", + "provider.custom.edit.advanced": "JSON yapılandırma dosyasında gelişmiş ayarları düzenle", "provider.custom.headers.label": "Başlıklar (isteğe bağlı)", "provider.custom.headers.key.label": "Başlık", "provider.custom.headers.key.placeholder": "Başlık-Adı", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/uk.ts b/packages/kilo-vscode/webview-ui/src/i18n/uk.ts index e773ee2d54a..ea30dd59d27 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/uk.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/uk.ts @@ -446,45 +446,6 @@ export const dict = { "provider.custom.models.name.placeholder": "Відображувана назва", "provider.custom.models.reasoning.label": "Міркування", "provider.custom.models.modalities.image": "Зображення", - "provider.custom.models.variants.label": "Варіанти", - "provider.custom.models.variants.add": "Додати варіант", - "provider.custom.models.variants.remove": "Видалити варіант", - "provider.custom.models.variants.name.label": "Ім'я", - "provider.custom.models.variants.name.placeholder": "напр. thinking", - "provider.custom.models.variants.option.unset": "(не встановлено)", - "provider.custom.models.variants.enableThinking.label": "Увімкнути мислення (напр. Alibaba)", - "provider.custom.models.variants.enableThinking.placeholder": "enable_thinking", - "provider.custom.models.variants.enableThinking.true": "true", - "provider.custom.models.variants.enableThinking.false": "false", - "provider.custom.models.variants.thinking.label": "Тип мислення (напр. Z.ai)", - "provider.custom.models.variants.thinking.placeholder": "thinking", - "provider.custom.models.variants.thinking.enabled": "enabled", - "provider.custom.models.variants.thinking.disabled": "disabled", - "provider.custom.models.variants.thinking.adaptive": "adaptive", - "provider.custom.models.variants.splitReasoning.label": "Split reasoning (required for e.g. MiniMax)", - "provider.custom.models.variants.splitReasoning.placeholder": "reasoning_split", - "provider.custom.models.variants.splitReasoning.true": "true", - "provider.custom.models.variants.splitReasoning.false": "false", - "provider.custom.models.variants.chatTemplateArgs.label": - "Увімкнути мислення через аргументи шаблону чату (напр. Hugging Face)", - "provider.custom.models.variants.chatTemplateArgs.placeholder": "chat_template_args", - "provider.custom.models.variants.chatTemplateArgs.true": "true", - "provider.custom.models.variants.chatTemplateArgs.false": "false", - "provider.custom.models.variants.reasoningEffort.label": "Зусилля міркування", - "provider.custom.models.variants.reasoningEffort.placeholder": "reasoningEffort", - "provider.custom.models.variants.reasoningEffort.none": "none", - "provider.custom.models.variants.reasoningEffort.minimal": "minimal", - "provider.custom.models.variants.reasoningEffort.low": "low", - "provider.custom.models.variants.reasoningEffort.medium": "medium", - "provider.custom.models.variants.reasoningEffort.high": "high", - "provider.custom.models.variants.reasoningEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.label": "Output effort (e.g. Anthropic)", - "provider.custom.models.variants.outputEffort.placeholder": "effort", - "provider.custom.models.variants.outputEffort.low": "low", - "provider.custom.models.variants.outputEffort.medium": "medium", - "provider.custom.models.variants.outputEffort.high": "high", - "provider.custom.models.variants.outputEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.max": "max", "provider.custom.models.remove": "Видалити модель", "provider.custom.models.add": "Додати модель", "provider.custom.models.fetch.authError": "Автентифікація не вдалася. Перевірте API-ключ вище і спробуйте ще раз.", @@ -498,6 +459,7 @@ export const dict = { "provider.custom.models.fetch.search": "Пошук моделей\u2026", "provider.custom.models.fetch.add": "Додати {{count}} моделей", "provider.custom.edit.title": "Редагувати провайдера", + "provider.custom.edit.advanced": "Редагувати розширені налаштування у файлі конфігурації JSON", "provider.custom.headers.label": "Заголовки (необов'язково)", "provider.custom.headers.key.label": "Заголовок", "provider.custom.headers.key.placeholder": "Назва-заголовка", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/zh.ts b/packages/kilo-vscode/webview-ui/src/i18n/zh.ts index 249a332bd1b..11bbdef8350 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/zh.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/zh.ts @@ -473,44 +473,6 @@ export const dict = { "provider.custom.models.name.placeholder": "显示名称", "provider.custom.models.reasoning.label": "推理", "provider.custom.models.modalities.image": "图片", - "provider.custom.models.variants.label": "变体", - "provider.custom.models.variants.add": "添加变体", - "provider.custom.models.variants.remove": "移除变体", - "provider.custom.models.variants.name.label": "名称", - "provider.custom.models.variants.name.placeholder": "例如 thinking", - "provider.custom.models.variants.option.unset": "(未设置)", - "provider.custom.models.variants.enableThinking.label": "启用思考 (例如 Alibaba)", - "provider.custom.models.variants.enableThinking.placeholder": "enable_thinking", - "provider.custom.models.variants.enableThinking.true": "true", - "provider.custom.models.variants.enableThinking.false": "false", - "provider.custom.models.variants.thinking.label": "思考类型 (例如 Z.ai)", - "provider.custom.models.variants.thinking.placeholder": "thinking", - "provider.custom.models.variants.thinking.enabled": "enabled", - "provider.custom.models.variants.thinking.disabled": "disabled", - "provider.custom.models.variants.thinking.adaptive": "adaptive", - "provider.custom.models.variants.splitReasoning.label": "Split reasoning (required for e.g. MiniMax)", - "provider.custom.models.variants.splitReasoning.placeholder": "reasoning_split", - "provider.custom.models.variants.splitReasoning.true": "true", - "provider.custom.models.variants.splitReasoning.false": "false", - "provider.custom.models.variants.chatTemplateArgs.label": "通过聊天模板参数启用思考(如 Hugging Face)", - "provider.custom.models.variants.chatTemplateArgs.placeholder": "chat_template_args", - "provider.custom.models.variants.chatTemplateArgs.true": "true", - "provider.custom.models.variants.chatTemplateArgs.false": "false", - "provider.custom.models.variants.reasoningEffort.label": "推理强度", - "provider.custom.models.variants.reasoningEffort.placeholder": "reasoningEffort", - "provider.custom.models.variants.reasoningEffort.none": "none", - "provider.custom.models.variants.reasoningEffort.minimal": "minimal", - "provider.custom.models.variants.reasoningEffort.low": "low", - "provider.custom.models.variants.reasoningEffort.medium": "medium", - "provider.custom.models.variants.reasoningEffort.high": "high", - "provider.custom.models.variants.reasoningEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.label": "Output effort (e.g. Anthropic)", - "provider.custom.models.variants.outputEffort.placeholder": "effort", - "provider.custom.models.variants.outputEffort.low": "low", - "provider.custom.models.variants.outputEffort.medium": "medium", - "provider.custom.models.variants.outputEffort.high": "high", - "provider.custom.models.variants.outputEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.max": "max", "provider.custom.models.remove": "移除模型", "provider.custom.models.add": "添加模型", "provider.custom.models.fetch.authError": "认证失败。请检查上方的 API 密钥后重试。", @@ -524,6 +486,7 @@ export const dict = { "provider.custom.models.fetch.search": "搜索模型\u2026", "provider.custom.models.fetch.add": "添加 {{count}} 个模型", "provider.custom.edit.title": "编辑提供商", + "provider.custom.edit.advanced": "在 JSON 配置文件中编辑高级设置", "provider.custom.headers.label": "请求头(可选)", "provider.custom.headers.key.label": "请求头", "provider.custom.headers.key.placeholder": "Header-Name", diff --git a/packages/kilo-vscode/webview-ui/src/i18n/zht.ts b/packages/kilo-vscode/webview-ui/src/i18n/zht.ts index 93746129e74..d679c55c7fe 100644 --- a/packages/kilo-vscode/webview-ui/src/i18n/zht.ts +++ b/packages/kilo-vscode/webview-ui/src/i18n/zht.ts @@ -433,44 +433,6 @@ export const dict = { "provider.custom.models.name.placeholder": "顯示名稱", "provider.custom.models.reasoning.label": "推理", "provider.custom.models.modalities.image": "圖片", - "provider.custom.models.variants.label": "變體", - "provider.custom.models.variants.add": "新增變體", - "provider.custom.models.variants.remove": "移除變體", - "provider.custom.models.variants.name.label": "名稱", - "provider.custom.models.variants.name.placeholder": "例如 thinking", - "provider.custom.models.variants.option.unset": "(未設定)", - "provider.custom.models.variants.enableThinking.label": "啟用思考 (例如 Alibaba)", - "provider.custom.models.variants.enableThinking.placeholder": "enable_thinking", - "provider.custom.models.variants.enableThinking.true": "true", - "provider.custom.models.variants.enableThinking.false": "false", - "provider.custom.models.variants.thinking.label": "思考類型 (例如 Z.ai)", - "provider.custom.models.variants.thinking.placeholder": "thinking", - "provider.custom.models.variants.thinking.enabled": "enabled", - "provider.custom.models.variants.thinking.disabled": "disabled", - "provider.custom.models.variants.thinking.adaptive": "adaptive", - "provider.custom.models.variants.splitReasoning.label": "Split reasoning (required for e.g. MiniMax)", - "provider.custom.models.variants.splitReasoning.placeholder": "reasoning_split", - "provider.custom.models.variants.splitReasoning.true": "true", - "provider.custom.models.variants.splitReasoning.false": "false", - "provider.custom.models.variants.chatTemplateArgs.label": "透過聊天範本參數啟用思考(如 Hugging Face)", - "provider.custom.models.variants.chatTemplateArgs.placeholder": "chat_template_args", - "provider.custom.models.variants.chatTemplateArgs.true": "true", - "provider.custom.models.variants.chatTemplateArgs.false": "false", - "provider.custom.models.variants.reasoningEffort.label": "推理強度", - "provider.custom.models.variants.reasoningEffort.placeholder": "reasoningEffort", - "provider.custom.models.variants.reasoningEffort.none": "none", - "provider.custom.models.variants.reasoningEffort.minimal": "minimal", - "provider.custom.models.variants.reasoningEffort.low": "low", - "provider.custom.models.variants.reasoningEffort.medium": "medium", - "provider.custom.models.variants.reasoningEffort.high": "high", - "provider.custom.models.variants.reasoningEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.label": "Output effort (e.g. Anthropic)", - "provider.custom.models.variants.outputEffort.placeholder": "effort", - "provider.custom.models.variants.outputEffort.low": "low", - "provider.custom.models.variants.outputEffort.medium": "medium", - "provider.custom.models.variants.outputEffort.high": "high", - "provider.custom.models.variants.outputEffort.xhigh": "xhigh", - "provider.custom.models.variants.outputEffort.max": "max", "provider.custom.models.remove": "移除模型", "provider.custom.models.add": "新增模型", "provider.custom.models.fetch.authError": "驗證失敗。請檢查上方的 API 金鑰後重試。", @@ -484,6 +446,7 @@ export const dict = { "provider.custom.models.fetch.search": "搜尋模型\u2026", "provider.custom.models.fetch.add": "新增 {{count}} 個模型", "provider.custom.edit.title": "編輯供應商", + "provider.custom.edit.advanced": "在 JSON 設定檔中編輯進階設定", "provider.custom.headers.label": "標頭(選填)", "provider.custom.headers.key.label": "標頭", "provider.custom.headers.key.placeholder": "Header-Name", diff --git a/packages/kilo-vscode/webview-ui/src/utils/open-config.ts b/packages/kilo-vscode/webview-ui/src/utils/open-config.ts new file mode 100644 index 00000000000..9ae1ed38393 --- /dev/null +++ b/packages/kilo-vscode/webview-ui/src/utils/open-config.ts @@ -0,0 +1,32 @@ +import type { LanguageContextValue } from "../context/language" +import type { OpenConfigFileRequest } from "../types/messages" + +export function configMessage(scope: "local" | "global", t: LanguageContextValue["t"]): OpenConfigFileRequest { + const label = t(scope === "global" ? "settings.config.scope.global" : "settings.config.scope.local") + return { + type: "openConfigFile", + scope, + labels: { + scope: label, + statusLoaded: t("settings.config.status.loaded"), + statusLoadedLegacy: t("settings.config.status.loadedLegacy"), + statusNotLoaded: t("settings.config.status.notLoaded"), + statusCreate: t("settings.config.status.create"), + title: t("settings.config.title", { scope: label }), + placeholder: t("settings.config.placeholder"), + noWorkspace: t("settings.config.noWorkspace"), + openFailed: t("settings.config.openFailed", { scope: label, message: "{{message}}" }), + sourceXdg: t("settings.config.source.xdg"), + sourceHomeKilo: t("settings.config.source.homeKilo"), + sourceHomeKilocode: t("settings.config.source.homeKilocode"), + sourceHomeOpencode: t("settings.config.source.homeOpencode"), + sourceEnvFile: t("settings.config.source.envFile"), + sourceEnvDir: t("settings.config.source.envDir"), + sourceEnvContent: t("settings.config.source.envContent"), + sourceProjectKilo: t("settings.config.source.projectKilo"), + sourceProjectRoot: t("settings.config.source.projectRoot"), + sourceProjectKilocode: t("settings.config.source.projectKilocode"), + sourceProjectOpencode: t("settings.config.source.projectOpencode"), + }, + } +} diff --git a/packages/opencode/src/kilocode/provider/provider.ts b/packages/opencode/src/kilocode/provider/provider.ts index cc8a452fc96..21345881ee9 100644 --- a/packages/opencode/src/kilocode/provider/provider.ts +++ b/packages/opencode/src/kilocode/provider/provider.ts @@ -15,6 +15,8 @@ import { ProviderError } from "@/provider/error" import { Effect, Schema } from "effect" import type { LanguageModelV3 } from "@ai-sdk/provider" import { mapValues, omit, pickBy } from "remeda" +import { reasoningSummary } from "./reasoning-summary" +import type { Provider } from "@/provider/provider" /** Default timeout (ms) for provider HTTP requests (connection phase). */ export const REQUEST_TIMEOUT_MS = 300_000 // 5 minutes @@ -95,6 +97,39 @@ export function patchConfigModel(cfg: any, existing: any) { } } +const CUSTOM_PROVIDER_PACKAGES = new Set(["@ai-sdk/openai-compatible", "@ai-sdk/openai", "@ai-sdk/anthropic"]) +const FALLBACK_EFFORTS = ["none", "low", "medium", "high", "xhigh", "max"] +type Variants = NonNullable +type Generate = (model: Provider.Model) => Variants + +export function customProviderVariants(model: Provider.Model, npm: unknown, generate: Generate): Variants { + if (model.variants && Object.keys(model.variants).length > 0) return model.variants + + const supported = typeof npm === "string" && CUSTOM_PROVIDER_PACKAGES.has(npm) && model.api.npm === npm + const variants = generate(model) + if (Object.keys(variants).length > 0) return variants + if (!model.capabilities.reasoning || !supported) return variants + + return Object.fromEntries( + FALLBACK_EFFORTS.map((effort) => { + if (npm === "@ai-sdk/anthropic") { + return [effort, effort === "none" ? { thinking: { type: "disabled" } } : { effort }] + } + if (npm === "@ai-sdk/openai") { + return [ + effort, + { + reasoningEffort: effort, + reasoningSummary: reasoningSummary(model), + include: ["reasoning.encrypted_content"], + }, + ] + } + return [effort, { reasoningEffort: effort }] + }), + ) +} + // --------------------------------------------------------------------------- // Custom loaders (new or fully-replaced loaders) // --------------------------------------------------------------------------- diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index 897e8a6880f..c830ad8bb78 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -37,6 +37,7 @@ import { KILO_MODEL_SCHEMA_EXTENSIONS, patchModelsDevModel as patchKiloModel, patchConfigModel as patchKiloConfigModel, + customProviderVariants, patchCustomLoaderResult, patchKiloProviderPrivacy, kiloSmallModelPriority, @@ -1526,7 +1527,12 @@ const layer = Layer.effect( // variants: {}, // kilocode_change, moved into patchKiloConfigModel ...patchKiloConfigModel(model, existingModel), // kilocode_change } - const merged = mergeDeep(ProviderTransform.variants(parsedModel), model.variants ?? {}) + // kilocode_change start + const generated = Object.keys(model.variants ?? {}).length + ? {} + : customProviderVariants(parsedModel, model.provider?.npm ?? provider.npm, ProviderTransform.variants) + const merged = mergeDeep(generated, model.variants ?? {}) + // kilocode_change end parsedModel.variants = mapValues( pickBy(merged, (v): v is NonNullable => !!v && !v.disabled), // kilocode_change - drop null delete sentinels (v) => omit(v, ["disabled"]), diff --git a/packages/opencode/test/kilocode/custom-provider-variants.test.ts b/packages/opencode/test/kilocode/custom-provider-variants.test.ts new file mode 100644 index 00000000000..7de3036fd7a --- /dev/null +++ b/packages/opencode/test/kilocode/custom-provider-variants.test.ts @@ -0,0 +1,45 @@ +import { expect } from "bun:test" +import { LayerNode } from "@opencode-ai/core/effect/layer-node" +import { ProviderV2 } from "@opencode-ai/core/provider" +import { Effect } from "effect" +import { Env } from "@/env" +import { Plugin } from "@/plugin" +import { Provider } from "@/provider/provider" +import { testEffect } from "../lib/effect" + +const it = testEffect(LayerNode.compile(LayerNode.group([Provider.node, Env.node, Plugin.node]))) + +it.instance( + "uses configured variants instead of inferred reasoning efforts", + () => + Effect.gen(function* () { + const providers = yield* Provider.use.list() + const model = providers[ProviderV2.ID.make("custom")]?.models["qwen-custom"] + + expect(Object.keys(model?.variants ?? {})).toEqual(["custom"]) + expect(model?.variants?.high).toBeUndefined() + expect(model?.variants?.custom).toEqual({ reasoningEffort: "custom" }) + }), + { + config: { + provider: { + custom: { + name: "Custom", + npm: "@ai-sdk/openai-compatible", + options: { apiKey: "test" }, + models: { + "qwen-custom": { + name: "Qwen Custom", + reasoning: true, + limit: { context: 128_000, output: 16_000 }, + variants: { + high: { disabled: true }, + custom: { reasoningEffort: "custom" }, + }, + }, + }, + }, + }, + }, + }, +) diff --git a/packages/opencode/test/kilocode/provider-reasoning-options.test.ts b/packages/opencode/test/kilocode/provider-reasoning-options.test.ts index 711820ede3b..5987819421d 100644 --- a/packages/opencode/test/kilocode/provider-reasoning-options.test.ts +++ b/packages/opencode/test/kilocode/provider-reasoning-options.test.ts @@ -1,6 +1,7 @@ import { describe, expect, test } from "bun:test" import { ProviderTransform } from "../../src/provider/transform" import { Provider } from "../../src/provider/provider" +import { customProviderVariants } from "../../src/kilocode/provider/provider" import type * as ModelsDev from "@opencode-ai/core/models-dev" function mockModel(overrides: Partial = {}): any { @@ -138,3 +139,67 @@ describe("ProviderTransform.reasoningVariants - models.dev reasoning_options", ( expect(Object.keys(gpt5.variants ?? {})).toEqual(["minimal", "low", "medium", "high"]) }) }) + +describe("custom provider fallback reasoning efforts", () => { + const efforts = ["none", "low", "medium", "high", "xhigh", "max"] + + for (const npm of ["@ai-sdk/openai-compatible", "@ai-sdk/openai", "@ai-sdk/anthropic"]) { + test(`${npm} exposes broad efforts after heuristics fail`, () => { + const model = mockModel({ id: "qwen-custom", api: { id: "qwen-custom", url: "https://api.test.com", npm } }) + const generated = ProviderTransform.variants({ ...model, variants: {} }) + expect(generated).toEqual({}) + + const result = customProviderVariants(model, npm, ProviderTransform.variants) + + expect(Object.keys(result)).toEqual(efforts) + if (npm === "@ai-sdk/anthropic") { + expect(result.none).toEqual({ thinking: { type: "disabled" } }) + expect(result.max).toEqual({ effort: "max" }) + return + } + expect(result.none?.reasoningEffort).toBe("none") + expect(result.max?.reasoningEffort).toBe("max") + }) + } + + test("preserves successful heuristics", () => { + const model = mockModel({ api: { id: "custom", url: "https://api.test.com", npm: "@ai-sdk/openai-compatible" } }) + const generated = { low: { reasoningEffort: "low" }, high: { reasoningEffort: "high" } } + expect(customProviderVariants(model, model.api.npm, () => generated)).toBe(generated) + }) + + test("prefers configured variants to inference", () => { + const variants = { custom: { reasoningEffort: "custom" } } + for (const npm of ["@ai-sdk/openai-compatible", "@ai-sdk/openai", "@ai-sdk/anthropic"]) { + const model = mockModel({ api: { id: "custom", url: "https://api.test.com", npm }, variants }) + expect( + customProviderVariants(model, npm, () => { + throw new Error("inference should not run") + }), + ).toBe(variants) + } + }) + + test("requires a reasoning model with an explicitly configured supported package", () => { + const npm = "@ai-sdk/openai-compatible" + const plain = mockModel({ + api: { id: "custom", url: "https://api.test.com", npm }, + capabilities: { ...mockModel().capabilities, reasoning: false }, + }) + expect(customProviderVariants(plain, npm, () => ({}))).toEqual({}) + expect( + customProviderVariants( + mockModel({ api: { id: "custom", url: "https://api.test.com", npm } }), + undefined, + () => ({}), + ), + ).toEqual({}) + expect( + customProviderVariants( + mockModel({ api: { id: "custom", url: "https://api.test.com", npm: "unrelated-provider" } }), + "unrelated-provider", + () => ({}), + ), + ).toEqual({}) + }) +}) diff --git a/packages/opencode/test/provider/provider.test.ts b/packages/opencode/test/provider/provider.test.ts index 47051f6ed30..e92389ee2a3 100644 --- a/packages/opencode/test/provider/provider.test.ts +++ b/packages/opencode/test/provider/provider.test.ts @@ -1536,14 +1536,13 @@ it.instance( ) it.instance( - "variant config merges with generated variants", + "configured variants remain authoritative", // kilocode_change Effect.gen(function* () { yield* set("ANTHROPIC_API_KEY", "test-api-key") const providers = yield* list const model = providers[ProviderV2.ID.anthropic].models["claude-sonnet-4-20250514"] expect(model.variants!["high"]).toBeDefined() - // Should have both the generated thinking config and the custom option - expect(model.variants!["high"].thinking).toBeDefined() + expect(model.variants!["high"].thinking).toBeUndefined() // kilocode_change expect(model.variants!["high"].extraOption).toBe("custom-value") }), {