diff --git a/webview-ui/playwright/index.tsx b/webview-ui/playwright/index.tsx index 67af70105d..3710fe1502 100644 --- a/webview-ui/playwright/index.tsx +++ b/webview-ui/playwright/index.tsx @@ -1,6 +1,7 @@ import "./vscode-theme-dark.css" import "@vscode/codicons/dist/codicon.css" import "../src/index.css" +import "./vscode-theme-light.css" // Components read `window.IMAGES_BASE_URI` at mount time to resolve extension // image assets. Under Playwright CT the extension host isn't present, so seed diff --git a/webview-ui/playwright/vscode-theme-light.css b/webview-ui/playwright/vscode-theme-light.css new file mode 100644 index 0000000000..c877cea470 --- /dev/null +++ b/webview-ui/playwright/vscode-theme-light.css @@ -0,0 +1,35 @@ +.vscode-light { + color-scheme: light; + --vscode-foreground: #3b3b3b; + --vscode-disabledForeground: #61616180; + --vscode-descriptionForeground: #717171; + --vscode-errorForeground: #a1260d; + --vscode-focusBorder: #0090f1; + --vscode-editor-foreground: #333333; + --vscode-editor-background: #ffffff; + --vscode-button-foreground: #ffffff; + --vscode-button-background: #007acc; + --vscode-button-hoverBackground: #0062a3; + --vscode-dropdown-foreground: #3b3b3b; + --vscode-dropdown-background: #ffffff; + --vscode-dropdown-border: #cecece; + --vscode-input-foreground: #3b3b3b; + --vscode-input-background: #ffffff; + --vscode-input-border: #cecece; + --vscode-list-hoverForeground: #3b3b3b; + --vscode-list-hoverBackground: #e8e8e8; + --vscode-list-focusBackground: #d6ebff; + --vscode-list-activeSelectionBackground: #0060c0; + --vscode-list-activeSelectionForeground: #ffffff; + --vscode-toolbar-hoverBackground: #e8e8e8; + --vscode-widget-border: #d4d4d4; + --vscode-widget-shadow: #00000029; + --vscode-menu-foreground: #3b3b3b; + --vscode-menu-background: #ffffff; + --vscode-editorHoverWidget-foreground: #3b3b3b; + --vscode-editorHoverWidget-background: #f8f8f8; + --vscode-editorHoverWidget-border: #c8c8c8; + --vscode-scrollbarSlider-background: #64646466; + --vscode-scrollbarSlider-hoverBackground: #64646499; + --vscode-scrollbarSlider-activeBackground: #00000099; +} diff --git a/webview-ui/src/components/settings/providers/OpenAICodex.tsx b/webview-ui/src/components/settings/providers/OpenAICodex.tsx index 755b272702..ee2abf0e2b 100644 --- a/webview-ui/src/components/settings/providers/OpenAICodex.tsx +++ b/webview-ui/src/components/settings/providers/OpenAICodex.tsx @@ -1,6 +1,11 @@ import React from "react" -import { type ProviderSettings, openAiCodexDefaultModelId, openAiCodexModels } from "@roo-code/types" +import { + OPEN_AI_CODEX_SERVICE_TIER_KEY, + type ProviderSettings, + openAiCodexDefaultModelId, + openAiCodexModels, +} from "@roo-code/types" import { useAppTranslation } from "@src/i18n/TranslationContext" import { Button } from "@src/components/ui" @@ -8,6 +13,7 @@ import { vscode } from "@src/utils/vscode" import { ModelPicker } from "../ModelPicker" import { OpenAICodexRateLimitDashboard } from "./OpenAICodexRateLimitDashboard" +import { OpenAICodexSpeedSelector } from "./OpenAICodexSpeedSelector" interface OpenAICodexProps { apiConfiguration: ProviderSettings @@ -66,6 +72,11 @@ export const OpenAICodex: React.FC = ({ simplifySettings={simplifySettings} hidePricing /> + + setApiConfigurationField(OPEN_AI_CODEX_SERVICE_TIER_KEY, value)} + /> ) } diff --git a/webview-ui/src/components/settings/providers/OpenAICodexSpeedSelector.tsx b/webview-ui/src/components/settings/providers/OpenAICodexSpeedSelector.tsx new file mode 100644 index 0000000000..09faf5cd8d --- /dev/null +++ b/webview-ui/src/components/settings/providers/OpenAICodexSpeedSelector.tsx @@ -0,0 +1,45 @@ +import React from "react" + +import { + OpenAiCodexServiceTier, + type OpenAiCodexServiceTier as OpenAiCodexServiceTierValue, +} from "@roo-code/types/model" + +import { useAppTranslation } from "@src/i18n/TranslationContext" +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, StandardTooltip } from "@src/components/ui" + +interface OpenAICodexSpeedSelectorProps { + value?: OpenAiCodexServiceTierValue + onValueChange: (value: OpenAiCodexServiceTierValue) => void +} + +export const OpenAICodexSpeedSelector: React.FC = ({ value, onValueChange }) => { + const { t } = useAppTranslation() + const selectId = React.useId() + + return ( +
+
+ + + + +
+ +
+ ) +} diff --git a/webview-ui/src/components/settings/providers/__tests__/OpenAICodex.spec.tsx b/webview-ui/src/components/settings/providers/__tests__/OpenAICodex.spec.tsx new file mode 100644 index 0000000000..d73120ada3 --- /dev/null +++ b/webview-ui/src/components/settings/providers/__tests__/OpenAICodex.spec.tsx @@ -0,0 +1,97 @@ +import React from "react" + +import { + OPEN_AI_CODEX_SERVICE_TIER_KEY, + OpenAiCodexServiceTier, + providerIdentifiers, + type ProviderSettings, +} from "@roo-code/types" + +import { fireEvent, render, screen } from "@/utils/test-utils" +import { vscode } from "@src/utils/vscode" + +import { OpenAICodex } from "../OpenAICodex" + +vi.mock("@src/i18n/TranslationContext", () => ({ + useAppTranslation: () => ({ + t: (key: string) => + ({ + "settings:openAiCodexSpeed.label": "Speed", + "settings:openAiCodexSpeed.tooltip": + "Fast uses Codex priority processing for about 1.5x speed and consumes more subscription quota.", + "settings:openAiCodexSpeed.standard": "Standard", + "settings:openAiCodexSpeed.fast": "Fast (1.5x speed, increased usage)", + })[key] ?? key, + }), +})) + +vi.mock("@src/components/ui", () => ({ + Button: ({ children, ...props }: React.ButtonHTMLAttributes) => ( + + ), + Select: ({ children, value, onValueChange }: any) => ( + + ), + SelectContent: ({ children }: any) => <>{children}, + SelectItem: ({ children, value }: any) => , + SelectTrigger: ({ children }: any) => <>{children}, + SelectValue: () => null, + StandardTooltip: ({ children, content }: any) => {children}, +})) + +vi.mock("../../ModelPicker", () => ({ + ModelPicker: () =>
, +})) + +vi.mock("../OpenAICodexRateLimitDashboard", () => ({ + OpenAICodexRateLimitDashboard: () => null, +})) + +vi.mock("@src/utils/vscode", () => ({ + vscode: { postMessage: vi.fn() }, +})) + +describe("OpenAICodex speed selector", () => { + const renderSelector = (apiConfiguration: ProviderSettings, setApiConfigurationField = vi.fn()) => { + render() + return { setApiConfigurationField, selector: screen.getByRole("combobox", { name: "Speed" }) } + } + + it("defaults to Standard and clearly explains the Fast quota trade-off", () => { + const { selector } = renderSelector({ apiProvider: providerIdentifiers.openaiCodex }) + + expect(selector).toHaveValue(OpenAiCodexServiceTier.Default) + expect(screen.getByRole("option", { name: "Standard" })).toBeInTheDocument() + expect(screen.getByRole("option", { name: "Fast (1.5x speed, increased usage)" })).toBeInTheDocument() + expect( + screen.getByTitle( + "Fast uses Codex priority processing for about 1.5x speed and consumes more subscription quota.", + ), + ).toBeInTheDocument() + }) + + it("selects Fast from a saved preference and persists changes through the settings callback", () => { + const { selector, setApiConfigurationField } = renderSelector({ + apiProvider: providerIdentifiers.openaiCodex, + [OPEN_AI_CODEX_SERVICE_TIER_KEY]: OpenAiCodexServiceTier.Priority, + }) + const postMessage = vi.mocked(vscode.postMessage) + + expect(selector).toHaveValue(OpenAiCodexServiceTier.Priority) + + fireEvent.change(selector, { target: { value: OpenAiCodexServiceTier.Default } }) + expect(setApiConfigurationField).toHaveBeenLastCalledWith( + OPEN_AI_CODEX_SERVICE_TIER_KEY, + OpenAiCodexServiceTier.Default, + ) + + fireEvent.change(selector, { target: { value: OpenAiCodexServiceTier.Priority } }) + expect(setApiConfigurationField).toHaveBeenLastCalledWith( + OPEN_AI_CODEX_SERVICE_TIER_KEY, + OpenAiCodexServiceTier.Priority, + ) + expect(postMessage).not.toHaveBeenCalled() + }) +}) diff --git a/webview-ui/src/components/settings/providers/__tests__/OpenAICodex.visual.fixture.tsx b/webview-ui/src/components/settings/providers/__tests__/OpenAICodex.visual.fixture.tsx new file mode 100644 index 0000000000..2061f00614 --- /dev/null +++ b/webview-ui/src/components/settings/providers/__tests__/OpenAICodex.visual.fixture.tsx @@ -0,0 +1,32 @@ +/* v8 ignore file -- Playwright component fixture is covered by the visual test. */ +import React from "react" + +import { OpenAiCodexServiceTier } from "@roo-code/types/model" + +import { TranslationContext } from "@src/i18n/TranslationContext" +import { TooltipProvider } from "@src/components/ui/tooltip" +import { OpenAICodexSpeedSelector } from "../OpenAICodexSpeedSelector" + +const translations: Record = { + "settings:common.select": "Select", + "settings:openAiCodexSpeed.label": "Speed", + "settings:openAiCodexSpeed.tooltip": + "Fast uses Codex priority processing for about 1.5x speed and consumes more subscription quota.", + "settings:openAiCodexSpeed.standard": "Standard", + "settings:openAiCodexSpeed.fast": "Fast (1.5x speed, increased usage)", +} + +export const OpenAICodexFixture = () => ( + translations[key] ?? key, + i18n: null as unknown as typeof import("../../../../i18n/setup").default, + }}> + +
+ {}} /> + {}} /> +
+
+
+) diff --git a/webview-ui/src/components/settings/providers/__tests__/OpenAICodex.visual.tsx b/webview-ui/src/components/settings/providers/__tests__/OpenAICodex.visual.tsx new file mode 100644 index 0000000000..60ebd84053 --- /dev/null +++ b/webview-ui/src/components/settings/providers/__tests__/OpenAICodex.visual.tsx @@ -0,0 +1,72 @@ +import React from "react" + +import { expect, test } from "../../../../../playwright/coverage-fixture" +import { OpenAICodexFixture } from "./OpenAICodex.visual.fixture" + +const themes = [ + { + name: "dark", + bodyClass: "vscode-dark", + themeId: "Default Dark Modern", + editorBackground: "#1e1e1e", + dropdownBackground: "#3c3c3c", + triggerBackground: "rgb(60, 60, 60)", + }, + { + name: "light", + bodyClass: "vscode-light", + themeId: "Default Light Modern", + editorBackground: "#ffffff", + dropdownBackground: "#ffffff", + triggerBackground: "rgb(255, 255, 255)", + }, +] as const + +for (const theme of themes) { + test(`renders both OpenAI Codex speeds in the VS Code ${theme.name} theme`, async ({ mount }) => { + const component = await mount() + const selectors = component.getByTestId("openai-codex-service-tier") + const comboboxes = component.getByRole("combobox", { name: "Speed" }) + const selector = selectors.first() + + await expect(selectors).toHaveCount(2) + await expect(comboboxes).toHaveCount(2) + await selector.evaluate((element, { bodyClass, themeId }) => { + const { document } = element.ownerDocument.defaultView! + + document.documentElement.className = bodyClass + document.body.className = bodyClass + document.body.dataset.vscodeThemeId = themeId + }, theme) + await expect + .poll(() => + selector.evaluate((element) => { + const body = element.ownerDocument.body + const styles = getComputedStyle(body) + const trigger = element.querySelector("button")! + + return { + documentClass: element.ownerDocument.documentElement.className, + bodyClass: body.className, + editorBackground: styles.getPropertyValue("--vscode-editor-background").trim(), + dropdownBackground: styles.getPropertyValue("--vscode-dropdown-background").trim(), + triggerBackground: getComputedStyle(trigger).backgroundColor, + } + }), + ) + .toEqual({ + documentClass: theme.bodyClass, + bodyClass: theme.bodyClass, + editorBackground: theme.editorBackground, + dropdownBackground: theme.dropdownBackground, + triggerBackground: theme.triggerBackground, + }) + + await component.evaluate(async () => { + await document.fonts.ready + await new Promise((resolve) => requestAnimationFrame(() => resolve())) + }) + + await expect(component).toHaveScreenshot(`openai-codex-speed-selector-states-${theme.name}.png`) + }) +} diff --git a/webview-ui/src/components/settings/providers/__tests__/__screenshots__/openai-codex-speed-selector-states-dark.png b/webview-ui/src/components/settings/providers/__tests__/__screenshots__/openai-codex-speed-selector-states-dark.png new file mode 100644 index 0000000000..87f8a1e061 Binary files /dev/null and b/webview-ui/src/components/settings/providers/__tests__/__screenshots__/openai-codex-speed-selector-states-dark.png differ diff --git a/webview-ui/src/components/settings/providers/__tests__/__screenshots__/openai-codex-speed-selector-states-light.png b/webview-ui/src/components/settings/providers/__tests__/__screenshots__/openai-codex-speed-selector-states-light.png new file mode 100644 index 0000000000..09bb7e5ee9 Binary files /dev/null and b/webview-ui/src/components/settings/providers/__tests__/__screenshots__/openai-codex-speed-selector-states-light.png differ diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index b9644e0d12..7c0454f55c 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -1046,6 +1046,12 @@ "limitMaxTokensDescription": "Limitar el nombre màxim de tokens en la resposta", "maxOutputTokensLabel": "Tokens màxims de sortida", "maxTokensGenerateDescription": "Tokens màxims a generar en la resposta", + "openAiCodexSpeed": { + "label": "Velocitat", + "tooltip": "El mode ràpid utilitza el processament prioritari de Codex per oferir aproximadament 1,5 vegades més velocitat i consumeix més quota de subscripció.", + "standard": "Estàndard", + "fast": "Ràpid (1,5 vegades més velocitat, més consum)" + }, "serviceTier": { "label": "Nivell de servei", "tooltip": "Per a un processament més ràpid de les sol·licituds de l'API, proveu el nivell de servei de processament prioritari. Per a preus més baixos amb una latència més alta, proveu el nivell de processament flexible.", diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index 46a8bd28e4..504bb56cba 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -1046,6 +1046,12 @@ "limitMaxTokensDescription": "Begrenze die maximale Anzahl von Tokens in der Antwort", "maxOutputTokensLabel": "Maximale Ausgabe-Tokens", "maxTokensGenerateDescription": "Maximale Tokens, die in der Antwort generiert werden", + "openAiCodexSpeed": { + "label": "Geschwindigkeit", + "tooltip": "Der schnelle Modus nutzt die priorisierte Codex-Verarbeitung für etwa 1,5-fache Geschwindigkeit und verbraucht mehr von deinem Abonnementkontingent.", + "standard": "Standard", + "fast": "Schnell (1,5-fache Geschwindigkeit, höherer Verbrauch)" + }, "serviceTier": { "label": "Service-Stufe", "tooltip": "Für eine schnellere Verarbeitung von API-Anfragen, probiere die Prioritäts-Verarbeitungsstufe. Für niedrigere Preise bei höherer Latenz, probiere die Flex-Verarbeitungsstufe.", diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index 37d33f8172..3d84065849 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -1126,6 +1126,12 @@ "limitMaxTokensDescription": "Limit the maximum number of tokens in the response", "maxOutputTokensLabel": "Max output tokens", "maxTokensGenerateDescription": "Maximum tokens to generate in response", + "openAiCodexSpeed": { + "label": "Speed", + "tooltip": "Fast uses Codex priority processing for about 1.5x speed and consumes more subscription quota.", + "standard": "Standard", + "fast": "Fast (1.5x speed, increased usage)" + }, "serviceTier": { "label": "Service tier", "tooltip": "For faster processing of API requests, try the priority processing service tier. For lower prices with higher latency, try the flex processing tier.", diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index f9c1be76f4..eba338005f 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -1046,6 +1046,12 @@ "limitMaxTokensDescription": "Limitar el número máximo de tokens en la respuesta", "maxOutputTokensLabel": "Tokens máximos de salida", "maxTokensGenerateDescription": "Tokens máximos a generar en la respuesta", + "openAiCodexSpeed": { + "label": "Velocidad", + "tooltip": "El modo rápido usa el procesamiento prioritario de Codex para ofrecer aproximadamente 1,5 veces más velocidad y consume más cuota de suscripción.", + "standard": "Estándar", + "fast": "Rápido (1,5 veces más velocidad, mayor uso)" + }, "serviceTier": { "label": "Nivel de servicio", "tooltip": "Para un procesamiento más rápido de las solicitudes de API, prueba el nivel de servicio de procesamiento prioritario. Para precios más bajos con mayor latencia, prueba el nivel de procesamiento flexible.", diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index 6da211144b..d6e6e0e64e 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -1046,6 +1046,12 @@ "limitMaxTokensDescription": "Limiter le nombre maximum de tokens dans la réponse", "maxOutputTokensLabel": "Tokens de sortie maximum", "maxTokensGenerateDescription": "Tokens maximum à générer dans la réponse", + "openAiCodexSpeed": { + "label": "Vitesse", + "tooltip": "Le mode rapide utilise le traitement prioritaire de Codex pour une vitesse environ 1,5 fois supérieure et consomme davantage de quota d'abonnement.", + "standard": "Standard", + "fast": "Rapide (vitesse 1,5 fois supérieure, utilisation accrue)" + }, "serviceTier": { "label": "Niveau de service", "tooltip": "Pour un traitement plus rapide des demandes d'API, essayez le niveau de service de traitement prioritaire. Pour des prix plus bas avec une latence plus élevée, essayez le niveau de traitement flexible.", diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index 522c68a586..3ff02125c5 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -1046,6 +1046,12 @@ "limitMaxTokensDescription": "प्रतिक्रिया में टोकन की अधिकतम संख्या सीमित करें", "maxOutputTokensLabel": "अधिकतम आउटपुट टोकन", "maxTokensGenerateDescription": "प्रतिक्रिया में उत्पन्न करने के लिए अधिकतम टोकन", + "openAiCodexSpeed": { + "label": "गति", + "tooltip": "तेज़ मोड लगभग 1.5 गुना गति के लिए Codex की प्राथमिकता प्रोसेसिंग का उपयोग करता है और अधिक सदस्यता कोटा खर्च करता है।", + "standard": "मानक", + "fast": "तेज़ (1.5 गुना गति, अधिक उपयोग)" + }, "serviceTier": { "label": "सेवा स्तर", "tooltip": "API अनुरोधों के तेज़ प्रसंस्करण के लिए, प्राथमिकता प्रसंस्करण सेवा स्तर का प्रयास करें। उच्च विलंबता के साथ कम कीमतों के लिए, फ्लेक्स प्रसंस्करण स्तर का प्रयास करें।", diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json index b2943e63bc..6c4b91243f 100644 --- a/webview-ui/src/i18n/locales/id/settings.json +++ b/webview-ui/src/i18n/locales/id/settings.json @@ -1046,6 +1046,12 @@ "limitMaxTokensDescription": "Batasi jumlah maksimum token dalam respons", "maxOutputTokensLabel": "Token output maksimum", "maxTokensGenerateDescription": "Token maksimum untuk dihasilkan dalam respons", + "openAiCodexSpeed": { + "label": "Kecepatan", + "tooltip": "Mode Cepat menggunakan pemrosesan prioritas Codex untuk kecepatan sekitar 1,5x dan memakai lebih banyak kuota langganan.", + "standard": "Standar", + "fast": "Cepat (kecepatan 1,5x, penggunaan meningkat)" + }, "serviceTier": { "label": "Tingkat layanan", "tooltip": "Untuk pemrosesan permintaan API yang lebih cepat, coba tingkat layanan pemrosesan prioritas. Untuk harga lebih rendah dengan latensi lebih tinggi, coba tingkat pemrosesan fleksibel.", diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index 6bd638c796..8f7fd7e917 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -1046,6 +1046,12 @@ "limitMaxTokensDescription": "Limita il numero massimo di token nella risposta", "maxOutputTokensLabel": "Token di output massimi", "maxTokensGenerateDescription": "Token massimi da generare nella risposta", + "openAiCodexSpeed": { + "label": "Velocità", + "tooltip": "La modalità veloce usa l'elaborazione prioritaria di Codex per una velocità circa 1,5 volte superiore e consuma più quota dell'abbonamento.", + "standard": "Standard", + "fast": "Veloce (velocità 1,5 volte superiore, utilizzo maggiore)" + }, "serviceTier": { "label": "Livello di servizio", "tooltip": "Per un'elaborazione più rapida delle richieste API, prova il livello di servizio di elaborazione prioritaria. Per prezzi più bassi con una latenza maggiore, prova il livello di elaborazione flessibile.", diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index 96fba3521a..ab692a49f8 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -1046,6 +1046,12 @@ "limitMaxTokensDescription": "レスポンスの最大トークン数を制限する", "maxOutputTokensLabel": "最大出力トークン", "maxTokensGenerateDescription": "レスポンスで生成する最大トークン数", + "openAiCodexSpeed": { + "label": "速度", + "tooltip": "高速モードは Codex の優先処理を使用して約1.5倍の速度を実現し、サブスクリプションの利用枠をより多く消費します。", + "standard": "標準", + "fast": "高速(約1.5倍、使用量増加)" + }, "serviceTier": { "label": "サービスティア", "tooltip": "APIリクエストをより速く処理するには、優先処理サービスティアをお試しください。低価格でレイテンシが高い場合は、フレックス処理ティアをお試しください。", diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index 40313a32f5..4e44f8170d 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -1046,6 +1046,12 @@ "limitMaxTokensDescription": "응답에서 최대 토큰 수 제한", "maxOutputTokensLabel": "최대 출력 토큰", "maxTokensGenerateDescription": "응답에서 생성할 최대 토큰 수", + "openAiCodexSpeed": { + "label": "속도", + "tooltip": "빠른 모드는 Codex 우선 처리를 사용하여 약 1.5배 빠른 속도를 제공하며 구독 할당량을 더 많이 사용합니다.", + "standard": "표준", + "fast": "빠름(1.5배 속도, 사용량 증가)" + }, "serviceTier": { "label": "서비스 등급", "tooltip": "API 요청을 더 빠르게 처리하려면 우선 처리 서비스 등급을 사용해 보세요. 더 낮은 가격에 더 높은 지연 시간을 원하시면 플렉스 처리 등급을 사용해 보세요.", diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json index 6664eb3d74..d517df4bd0 100644 --- a/webview-ui/src/i18n/locales/nl/settings.json +++ b/webview-ui/src/i18n/locales/nl/settings.json @@ -1046,6 +1046,12 @@ "limitMaxTokensDescription": "Beperk het maximale aantal tokens in het antwoord", "maxOutputTokensLabel": "Maximale output tokens", "maxTokensGenerateDescription": "Maximale tokens om te genereren in het antwoord", + "openAiCodexSpeed": { + "label": "Snelheid", + "tooltip": "De snelle modus gebruikt prioriteitsverwerking van Codex voor ongeveer 1,5 keer hogere snelheid en verbruikt meer abonnementquotum.", + "standard": "Standaard", + "fast": "Snel (1,5 keer hogere snelheid, meer verbruik)" + }, "serviceTier": { "label": "Serviceniveau", "tooltip": "Voor snellere verwerking van API-verzoeken, probeer het prioriteitsverwerkingsniveau. Voor lagere prijzen met hogere latentie, probeer het flexverwerkingsniveau.", diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index 7a7ab3dcb0..3ef8e06c32 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -1046,6 +1046,12 @@ "limitMaxTokensDescription": "Ogranicz maksymalną liczbę tokenów w odpowiedzi", "maxOutputTokensLabel": "Maksymalne tokeny wyjściowe", "maxTokensGenerateDescription": "Maksymalne tokeny do wygenerowania w odpowiedzi", + "openAiCodexSpeed": { + "label": "Szybkość", + "tooltip": "Tryb szybki korzysta z priorytetowego przetwarzania Codex, zapewniając około 1,5 raza większą szybkość i zużywając więcej limitu subskrypcji.", + "standard": "Standardowy", + "fast": "Szybki (1,5 raza szybciej, większe użycie)" + }, "serviceTier": { "label": "Poziom usług", "tooltip": "Aby szybciej przetwarzać żądania API, wypróbuj priorytetowy poziom usług. Aby uzyskać niższe ceny przy wyższej latencji, wypróbuj elastyczny poziom usług.", diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index bb44c1bcaa..9c67418d16 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -1046,6 +1046,12 @@ "limitMaxTokensDescription": "Limitar o número máximo de tokens na resposta", "maxOutputTokensLabel": "Tokens máximos de saída", "maxTokensGenerateDescription": "Tokens máximos para gerar na resposta", + "openAiCodexSpeed": { + "label": "Velocidade", + "tooltip": "O modo rápido usa o processamento prioritário do Codex para oferecer cerca de 1,5 vez mais velocidade e consome mais cota da assinatura.", + "standard": "Padrão", + "fast": "Rápido (1,5 vez mais velocidade, maior uso)" + }, "serviceTier": { "label": "Nível de serviço", "tooltip": "Para um processamento mais rápido das solicitações de API, experimente o nível de serviço de processamento prioritário. Para preços mais baixos com maior latência, experimente o nível de processamento flexível.", diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json index ee02578534..6d81073dbe 100644 --- a/webview-ui/src/i18n/locales/ru/settings.json +++ b/webview-ui/src/i18n/locales/ru/settings.json @@ -1046,6 +1046,12 @@ "limitMaxTokensDescription": "Ограничить максимальное количество токенов в ответе", "maxOutputTokensLabel": "Максимальные выходные токены", "maxTokensGenerateDescription": "Максимальные токены для генерации в ответе", + "openAiCodexSpeed": { + "label": "Скорость", + "tooltip": "Быстрый режим использует приоритетную обработку Codex, обеспечивая примерно 1,5-кратную скорость и расходуя больше квоты подписки.", + "standard": "Стандартный", + "fast": "Быстрый (скорость 1,5×, повышенный расход)" + }, "serviceTier": { "label": "Уровень обслуживания", "tooltip": "Для более быстрой обработки запросов API попробуйте уровень обслуживания с приоритетной обработкой. Для более низких цен с более высокой задержкой попробуйте уровень гибкой обработки.", diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index e37c154ead..0456367efc 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -1046,6 +1046,12 @@ "limitMaxTokensDescription": "Yanıttaki maksimum token sayısını sınırla", "maxOutputTokensLabel": "Maksimum çıktı tokenları", "maxTokensGenerateDescription": "Yanıtta oluşturulacak maksimum token sayısı", + "openAiCodexSpeed": { + "label": "Hız", + "tooltip": "Hızlı mod, yaklaşık 1,5 kat hız için Codex öncelikli işlemeyi kullanır ve daha fazla abonelik kotası tüketir.", + "standard": "Standart", + "fast": "Hızlı (1,5 kat hız, daha fazla kullanım)" + }, "serviceTier": { "label": "Hizmet seviyesi", "tooltip": "Daha hızlı API isteği işleme için öncelikli işleme hizmeti seviyesini deneyin. Daha düşük gecikme süresiyle daha düşük fiyatlar için esnek işleme seviyesini deneyin.", diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index c3b40a004a..4beb3f7171 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -1046,6 +1046,12 @@ "limitMaxTokensDescription": "Giới hạn số lượng token tối đa trong phản hồi", "maxOutputTokensLabel": "Token đầu ra tối đa", "maxTokensGenerateDescription": "Token tối đa để tạo trong phản hồi", + "openAiCodexSpeed": { + "label": "Tốc độ", + "tooltip": "Chế độ Nhanh sử dụng xử lý ưu tiên của Codex để đạt tốc độ nhanh hơn khoảng 1,5 lần và tiêu tốn nhiều hạn mức đăng ký hơn.", + "standard": "Tiêu chuẩn", + "fast": "Nhanh (tốc độ 1,5 lần, mức sử dụng cao hơn)" + }, "serviceTier": { "label": "Cấp độ dịch vụ", "tooltip": "Để xử lý các yêu cầu API nhanh hơn, hãy thử cấp độ dịch vụ xử lý ưu tiên. Để có giá thấp hơn với độ trễ cao hơn, hãy thử cấp độ xử lý linh hoạt.", diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index 2e8abf435e..8624c1899b 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -1046,6 +1046,12 @@ "limitMaxTokensDescription": "限制响应中的最大 Token 数量", "maxOutputTokensLabel": "最大输出 Token 数", "maxTokensGenerateDescription": "响应中生成的最大 Token 数", + "openAiCodexSpeed": { + "label": "速度", + "tooltip": "快速模式使用 Codex 优先处理,速度约为 1.5 倍,但会消耗更多订阅配额。", + "standard": "标准", + "fast": "快速(1.5 倍速度,用量增加)" + }, "serviceTier": { "label": "服务等级", "tooltip": "为加快API请求处理速度,请尝试优先处理服务等级。为获得更低价格但延迟较高,请尝试灵活处理等级。", diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index 481bab5301..8556e8b2f4 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -1073,6 +1073,12 @@ "limitMaxTokensDescription": "限制回應中的最大 Token 數量", "maxOutputTokensLabel": "最大輸出 Token 數", "maxTokensGenerateDescription": "回應中產生的最大 Token 數", + "openAiCodexSpeed": { + "label": "速度", + "tooltip": "快速模式使用 Codex 優先處理,速度約為 1.5 倍,但會消耗更多訂閱配額。", + "standard": "標準", + "fast": "快速(1.5 倍速度,用量增加)" + }, "serviceTier": { "label": "服務層級", "tooltip": "若需更快的 API 請求處理,請嘗試優先處理服務層級。若需較低價格但延遲較高,請嘗試彈性處理層級。",