mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-08-28 05:27:24 +00:00
feat(vertex): add 1M context window beta support for Claude Sonnet 4 (#10209)
This commit is contained in:
parent
2dec78ccb4
commit
3f1f8be2d1
23 changed files with 333 additions and 44 deletions
|
|
@ -237,6 +237,7 @@ const vertexSchema = apiModelIdProviderModelSchema.extend({
|
|||
vertexRegion: z.string().optional(),
|
||||
enableUrlContext: z.boolean().optional(),
|
||||
enableGrounding: z.boolean().optional(),
|
||||
vertex1MContext: z.boolean().optional(), // Enable 'context-1m-2025-08-07' beta for 1M context window.
|
||||
})
|
||||
|
||||
const openAiSchema = baseProviderSettingsSchema.extend({
|
||||
|
|
|
|||
|
|
@ -275,29 +275,49 @@ export const vertexModels = {
|
|||
},
|
||||
"claude-sonnet-4@20250514": {
|
||||
maxTokens: 8192,
|
||||
contextWindow: 200_000,
|
||||
contextWindow: 200_000, // Default 200K, extendable to 1M with beta flag 'context-1m-2025-08-07'
|
||||
supportsImages: true,
|
||||
supportsPromptCache: true,
|
||||
supportsNativeTools: true,
|
||||
defaultToolProtocol: "native",
|
||||
inputPrice: 3.0,
|
||||
outputPrice: 15.0,
|
||||
cacheWritesPrice: 3.75,
|
||||
cacheReadsPrice: 0.3,
|
||||
inputPrice: 3.0, // $3 per million input tokens (≤200K context)
|
||||
outputPrice: 15.0, // $15 per million output tokens (≤200K context)
|
||||
cacheWritesPrice: 3.75, // $3.75 per million tokens
|
||||
cacheReadsPrice: 0.3, // $0.30 per million tokens
|
||||
supportsReasoningBudget: true,
|
||||
// Tiered pricing for extended context (requires beta flag 'context-1m-2025-08-07')
|
||||
tiers: [
|
||||
{
|
||||
contextWindow: 1_000_000, // 1M tokens with beta flag
|
||||
inputPrice: 6.0, // $6 per million input tokens (>200K context)
|
||||
outputPrice: 22.5, // $22.50 per million output tokens (>200K context)
|
||||
cacheWritesPrice: 7.5, // $7.50 per million tokens (>200K context)
|
||||
cacheReadsPrice: 0.6, // $0.60 per million tokens (>200K context)
|
||||
},
|
||||
],
|
||||
},
|
||||
"claude-sonnet-4-5@20250929": {
|
||||
maxTokens: 8192,
|
||||
contextWindow: 200_000,
|
||||
contextWindow: 200_000, // Default 200K, extendable to 1M with beta flag 'context-1m-2025-08-07'
|
||||
supportsImages: true,
|
||||
supportsPromptCache: true,
|
||||
supportsNativeTools: true,
|
||||
defaultToolProtocol: "native",
|
||||
inputPrice: 3.0,
|
||||
outputPrice: 15.0,
|
||||
cacheWritesPrice: 3.75,
|
||||
cacheReadsPrice: 0.3,
|
||||
inputPrice: 3.0, // $3 per million input tokens (≤200K context)
|
||||
outputPrice: 15.0, // $15 per million output tokens (≤200K context)
|
||||
cacheWritesPrice: 3.75, // $3.75 per million tokens
|
||||
cacheReadsPrice: 0.3, // $0.30 per million tokens
|
||||
supportsReasoningBudget: true,
|
||||
// Tiered pricing for extended context (requires beta flag 'context-1m-2025-08-07')
|
||||
tiers: [
|
||||
{
|
||||
contextWindow: 1_000_000, // 1M tokens with beta flag
|
||||
inputPrice: 6.0, // $6 per million input tokens (>200K context)
|
||||
outputPrice: 22.5, // $22.50 per million output tokens (>200K context)
|
||||
cacheWritesPrice: 7.5, // $7.50 per million tokens (>200K context)
|
||||
cacheReadsPrice: 0.6, // $0.60 per million tokens (>200K context)
|
||||
},
|
||||
],
|
||||
},
|
||||
"claude-haiku-4-5@20251001": {
|
||||
maxTokens: 8192,
|
||||
|
|
@ -517,6 +537,10 @@ export const vertexModels = {
|
|||
},
|
||||
} as const satisfies Record<string, ModelInfo>
|
||||
|
||||
// Vertex AI models that support 1M context window beta
|
||||
// Uses the same beta header 'context-1m-2025-08-07' as Anthropic and Bedrock
|
||||
export const VERTEX_1M_CONTEXT_MODEL_IDS = ["claude-sonnet-4@20250514", "claude-sonnet-4-5@20250929"] as const
|
||||
|
||||
export const VERTEX_REGIONS = [
|
||||
{ value: "global", label: "global" },
|
||||
{ value: "us-central1", label: "us-central1" },
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
import { Anthropic } from "@anthropic-ai/sdk"
|
||||
import { AnthropicVertex } from "@anthropic-ai/vertex-sdk"
|
||||
|
||||
import { VERTEX_1M_CONTEXT_MODEL_IDS } from "@roo-code/types"
|
||||
|
||||
import { ApiStreamChunk } from "../../transform/stream"
|
||||
|
||||
import { AnthropicVertexHandler } from "../anthropic-vertex"
|
||||
|
|
@ -159,35 +161,39 @@ describe("VertexHandler", () => {
|
|||
outputTokens: 5,
|
||||
})
|
||||
|
||||
expect(mockCreate).toHaveBeenCalledWith({
|
||||
model: "claude-3-5-sonnet-v2@20241022",
|
||||
max_tokens: 8192,
|
||||
temperature: 0,
|
||||
system: [
|
||||
{
|
||||
type: "text",
|
||||
text: "You are a helpful assistant",
|
||||
cache_control: { type: "ephemeral" },
|
||||
},
|
||||
],
|
||||
messages: [
|
||||
{
|
||||
role: "user",
|
||||
content: [
|
||||
{
|
||||
type: "text",
|
||||
text: "Hello",
|
||||
cache_control: { type: "ephemeral" },
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
role: "assistant",
|
||||
content: "Hi there!",
|
||||
},
|
||||
],
|
||||
stream: true,
|
||||
})
|
||||
expect(mockCreate).toHaveBeenCalledWith(
|
||||
{
|
||||
model: "claude-3-5-sonnet-v2@20241022",
|
||||
max_tokens: 8192,
|
||||
temperature: 0,
|
||||
thinking: undefined,
|
||||
system: [
|
||||
{
|
||||
type: "text",
|
||||
text: "You are a helpful assistant",
|
||||
cache_control: { type: "ephemeral" },
|
||||
},
|
||||
],
|
||||
messages: [
|
||||
{
|
||||
role: "user",
|
||||
content: [
|
||||
{
|
||||
type: "text",
|
||||
text: "Hello",
|
||||
cache_control: { type: "ephemeral" },
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
role: "assistant",
|
||||
content: "Hi there!",
|
||||
},
|
||||
],
|
||||
stream: true,
|
||||
},
|
||||
undefined,
|
||||
)
|
||||
})
|
||||
|
||||
it("should handle multiple content blocks with line breaks for Claude", async () => {
|
||||
|
|
@ -401,6 +407,7 @@ describe("VertexHandler", () => {
|
|||
}),
|
||||
],
|
||||
}),
|
||||
undefined,
|
||||
)
|
||||
})
|
||||
|
||||
|
|
@ -858,6 +865,162 @@ describe("VertexHandler", () => {
|
|||
expect(result.reasoningBudget).toBeUndefined()
|
||||
expect(result.temperature).toBe(0)
|
||||
})
|
||||
|
||||
it("should enable 1M context for Claude Sonnet 4 when beta flag is set", () => {
|
||||
const handler = new AnthropicVertexHandler({
|
||||
apiModelId: VERTEX_1M_CONTEXT_MODEL_IDS[0],
|
||||
vertexProjectId: "test-project",
|
||||
vertexRegion: "us-central1",
|
||||
vertex1MContext: true,
|
||||
})
|
||||
|
||||
const model = handler.getModel()
|
||||
expect(model.info.contextWindow).toBe(1_000_000)
|
||||
expect(model.info.inputPrice).toBe(6.0)
|
||||
expect(model.info.outputPrice).toBe(22.5)
|
||||
expect(model.betas).toContain("context-1m-2025-08-07")
|
||||
})
|
||||
|
||||
it("should enable 1M context for Claude Sonnet 4.5 when beta flag is set", () => {
|
||||
const handler = new AnthropicVertexHandler({
|
||||
apiModelId: VERTEX_1M_CONTEXT_MODEL_IDS[1],
|
||||
vertexProjectId: "test-project",
|
||||
vertexRegion: "us-central1",
|
||||
vertex1MContext: true,
|
||||
})
|
||||
|
||||
const model = handler.getModel()
|
||||
expect(model.info.contextWindow).toBe(1_000_000)
|
||||
expect(model.info.inputPrice).toBe(6.0)
|
||||
expect(model.info.outputPrice).toBe(22.5)
|
||||
expect(model.betas).toContain("context-1m-2025-08-07")
|
||||
})
|
||||
|
||||
it("should not enable 1M context when flag is disabled", () => {
|
||||
const handler = new AnthropicVertexHandler({
|
||||
apiModelId: VERTEX_1M_CONTEXT_MODEL_IDS[0],
|
||||
vertexProjectId: "test-project",
|
||||
vertexRegion: "us-central1",
|
||||
vertex1MContext: false,
|
||||
})
|
||||
|
||||
const model = handler.getModel()
|
||||
expect(model.info.contextWindow).toBe(200_000)
|
||||
expect(model.info.inputPrice).toBe(3.0)
|
||||
expect(model.info.outputPrice).toBe(15.0)
|
||||
expect(model.betas).toBeUndefined()
|
||||
})
|
||||
|
||||
it("should not enable 1M context for non-supported models even with flag", () => {
|
||||
const handler = new AnthropicVertexHandler({
|
||||
apiModelId: "claude-3-5-sonnet-v2@20241022",
|
||||
vertexProjectId: "test-project",
|
||||
vertexRegion: "us-central1",
|
||||
vertex1MContext: true,
|
||||
})
|
||||
|
||||
const model = handler.getModel()
|
||||
expect(model.info.contextWindow).toBe(200_000)
|
||||
expect(model.betas).toBeUndefined()
|
||||
})
|
||||
})
|
||||
|
||||
describe("1M context beta header", () => {
|
||||
const mockMessages: Anthropic.Messages.MessageParam[] = [
|
||||
{
|
||||
role: "user",
|
||||
content: "Hello",
|
||||
},
|
||||
]
|
||||
|
||||
const systemPrompt = "You are a helpful assistant"
|
||||
|
||||
it("should include anthropic-beta header when 1M context is enabled", async () => {
|
||||
const handler = new AnthropicVertexHandler({
|
||||
apiModelId: VERTEX_1M_CONTEXT_MODEL_IDS[0],
|
||||
vertexProjectId: "test-project",
|
||||
vertexRegion: "us-central1",
|
||||
vertex1MContext: true,
|
||||
})
|
||||
|
||||
const mockStream = [
|
||||
{
|
||||
type: "message_start",
|
||||
message: {
|
||||
usage: {
|
||||
input_tokens: 10,
|
||||
output_tokens: 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
]
|
||||
|
||||
const asyncIterator = {
|
||||
async *[Symbol.asyncIterator]() {
|
||||
for (const chunk of mockStream) {
|
||||
yield chunk
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
const mockCreate = vitest.fn().mockResolvedValue(asyncIterator)
|
||||
;(handler["client"].messages as any).create = mockCreate
|
||||
|
||||
const stream = handler.createMessage(systemPrompt, mockMessages)
|
||||
|
||||
for await (const _chunk of stream) {
|
||||
// Just consume
|
||||
}
|
||||
|
||||
// Verify the API was called with the beta header
|
||||
expect(mockCreate).toHaveBeenCalledWith(
|
||||
expect.anything(),
|
||||
expect.objectContaining({
|
||||
headers: { "anthropic-beta": "context-1m-2025-08-07" },
|
||||
}),
|
||||
)
|
||||
})
|
||||
|
||||
it("should not include anthropic-beta header when 1M context is disabled", async () => {
|
||||
const handler = new AnthropicVertexHandler({
|
||||
apiModelId: VERTEX_1M_CONTEXT_MODEL_IDS[0],
|
||||
vertexProjectId: "test-project",
|
||||
vertexRegion: "us-central1",
|
||||
vertex1MContext: false,
|
||||
})
|
||||
|
||||
const mockStream = [
|
||||
{
|
||||
type: "message_start",
|
||||
message: {
|
||||
usage: {
|
||||
input_tokens: 10,
|
||||
output_tokens: 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
]
|
||||
|
||||
const asyncIterator = {
|
||||
async *[Symbol.asyncIterator]() {
|
||||
for (const chunk of mockStream) {
|
||||
yield chunk
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
const mockCreate = vitest.fn().mockResolvedValue(asyncIterator)
|
||||
;(handler["client"].messages as any).create = mockCreate
|
||||
|
||||
const stream = handler.createMessage(systemPrompt, mockMessages)
|
||||
|
||||
for await (const _chunk of stream) {
|
||||
// Just consume
|
||||
}
|
||||
|
||||
// Verify the API was called without the beta header
|
||||
expect(mockCreate).toHaveBeenCalledWith(expect.anything(), undefined)
|
||||
})
|
||||
})
|
||||
|
||||
describe("thinking model configuration", () => {
|
||||
|
|
@ -946,6 +1109,7 @@ describe("VertexHandler", () => {
|
|||
thinking: { type: "enabled", budget_tokens: 4096 },
|
||||
temperature: 1.0, // Thinking requires temperature 1.0
|
||||
}),
|
||||
undefined,
|
||||
)
|
||||
})
|
||||
})
|
||||
|
|
@ -1032,6 +1196,7 @@ describe("VertexHandler", () => {
|
|||
]),
|
||||
tool_choice: { type: "auto", disable_parallel_tool_use: true },
|
||||
}),
|
||||
undefined,
|
||||
)
|
||||
})
|
||||
|
||||
|
|
@ -1080,6 +1245,7 @@ describe("VertexHandler", () => {
|
|||
expect.not.objectContaining({
|
||||
tools: expect.anything(),
|
||||
}),
|
||||
undefined,
|
||||
)
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import {
|
|||
vertexModels,
|
||||
ANTHROPIC_DEFAULT_MAX_TOKENS,
|
||||
TOOL_PROTOCOL,
|
||||
VERTEX_1M_CONTEXT_MODEL_IDS,
|
||||
} from "@roo-code/types"
|
||||
|
||||
import { ApiHandlerOptions } from "../../shared/api"
|
||||
|
|
@ -69,7 +70,7 @@ export class AnthropicVertexHandler extends BaseProvider implements SingleComple
|
|||
messages: Anthropic.Messages.MessageParam[],
|
||||
metadata?: ApiHandlerCreateMessageMetadata,
|
||||
): ApiStream {
|
||||
let { id, info, temperature, maxTokens, reasoning: thinking } = this.getModel()
|
||||
let { id, info, temperature, maxTokens, reasoning: thinking, betas } = this.getModel()
|
||||
|
||||
const { supportsPromptCache } = info
|
||||
|
||||
|
|
@ -120,7 +121,10 @@ export class AnthropicVertexHandler extends BaseProvider implements SingleComple
|
|||
...nativeToolParams,
|
||||
}
|
||||
|
||||
const stream = await this.client.messages.create(params)
|
||||
// and prompt caching
|
||||
const requestOptions = betas?.length ? { headers: { "anthropic-beta": betas.join(",") } } : undefined
|
||||
|
||||
const stream = await this.client.messages.create(params, requestOptions)
|
||||
|
||||
for await (const chunk of stream) {
|
||||
switch (chunk.type) {
|
||||
|
|
@ -218,14 +222,49 @@ export class AnthropicVertexHandler extends BaseProvider implements SingleComple
|
|||
getModel() {
|
||||
const modelId = this.options.apiModelId
|
||||
let id = modelId && modelId in vertexModels ? (modelId as VertexModelId) : vertexDefaultModelId
|
||||
const info: ModelInfo = vertexModels[id]
|
||||
let info: ModelInfo = vertexModels[id]
|
||||
|
||||
// Check if 1M context beta should be enabled for supported models
|
||||
const supports1MContext = VERTEX_1M_CONTEXT_MODEL_IDS.includes(
|
||||
id as (typeof VERTEX_1M_CONTEXT_MODEL_IDS)[number],
|
||||
)
|
||||
const enable1MContext = supports1MContext && this.options.vertex1MContext
|
||||
|
||||
// If 1M context beta is enabled, update the model info with tier pricing
|
||||
if (enable1MContext) {
|
||||
const tier = info.tiers?.[0]
|
||||
if (tier) {
|
||||
info = {
|
||||
...info,
|
||||
contextWindow: tier.contextWindow,
|
||||
inputPrice: tier.inputPrice,
|
||||
outputPrice: tier.outputPrice,
|
||||
cacheWritesPrice: tier.cacheWritesPrice,
|
||||
cacheReadsPrice: tier.cacheReadsPrice,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const params = getModelParams({ format: "anthropic", modelId: id, model: info, settings: this.options })
|
||||
|
||||
// Build betas array for request headers
|
||||
const betas: string[] = []
|
||||
|
||||
// Add 1M context beta flag if enabled for supported models
|
||||
if (enable1MContext) {
|
||||
betas.push("context-1m-2025-08-07")
|
||||
}
|
||||
|
||||
// The `:thinking` suffix indicates that the model is a "Hybrid"
|
||||
// reasoning model and that reasoning is required to be enabled.
|
||||
// The actual model ID honored by Anthropic's API does not have this
|
||||
// suffix.
|
||||
return { id: id.endsWith(":thinking") ? id.replace(":thinking", "") : id, info, ...params }
|
||||
return {
|
||||
id: id.endsWith(":thinking") ? id.replace(":thinking", "") : id,
|
||||
info,
|
||||
betas: betas.length > 0 ? betas : undefined,
|
||||
...params,
|
||||
}
|
||||
}
|
||||
|
||||
async completePrompt(prompt: string) {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import { useCallback } from "react"
|
|||
import { Checkbox } from "vscrui"
|
||||
import { VSCodeLink, VSCodeTextField } from "@vscode/webview-ui-toolkit/react"
|
||||
|
||||
import { type ProviderSettings, VERTEX_REGIONS } from "@roo-code/types"
|
||||
import { type ProviderSettings, VERTEX_REGIONS, VERTEX_1M_CONTEXT_MODEL_IDS } from "@roo-code/types"
|
||||
|
||||
import { useAppTranslation } from "@src/i18n/TranslationContext"
|
||||
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@src/components/ui"
|
||||
|
|
@ -18,6 +18,13 @@ type VertexProps = {
|
|||
export const Vertex = ({ apiConfiguration, setApiConfigurationField, simplifySettings }: VertexProps) => {
|
||||
const { t } = useAppTranslation()
|
||||
|
||||
// Check if the selected model supports 1M context (Claude Sonnet 4 / 4.5)
|
||||
const supports1MContextBeta =
|
||||
!!apiConfiguration?.apiModelId &&
|
||||
VERTEX_1M_CONTEXT_MODEL_IDS.includes(
|
||||
apiConfiguration.apiModelId as (typeof VERTEX_1M_CONTEXT_MODEL_IDS)[number],
|
||||
)
|
||||
|
||||
const handleInputChange = useCallback(
|
||||
<K extends keyof ProviderSettings, E>(
|
||||
field: K,
|
||||
|
|
@ -94,6 +101,22 @@ export const Vertex = ({ apiConfiguration, setApiConfigurationField, simplifySet
|
|||
</Select>
|
||||
</div>
|
||||
|
||||
{supports1MContextBeta && (
|
||||
<div>
|
||||
<Checkbox
|
||||
data-testid="checkbox-vertex-1m-context"
|
||||
checked={apiConfiguration?.vertex1MContext ?? false}
|
||||
onChange={(checked: boolean) => {
|
||||
setApiConfigurationField("vertex1MContext", checked)
|
||||
}}>
|
||||
{t("settings:providers.vertex1MContextBetaLabel")}
|
||||
</Checkbox>
|
||||
<div className="text-sm text-vscode-descriptionForeground mt-1 ml-6">
|
||||
{t("settings:providers.vertex1MContextBetaDescription")}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{!simplifySettings && apiConfiguration.apiModelId?.startsWith("gemini") && (
|
||||
<div className="mt-6">
|
||||
<Checkbox
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/ca/settings.json
generated
2
webview-ui/src/i18n/locales/ca/settings.json
generated
|
|
@ -301,6 +301,8 @@
|
|||
"anthropic1MContextBetaDescription": "Amplia la finestra de context a 1 milió de tokens per a Claude Sonnet 4",
|
||||
"awsBedrock1MContextBetaLabel": "Activa la finestra de context d'1M (Beta)",
|
||||
"awsBedrock1MContextBetaDescription": "Amplia la finestra de context a 1 milió de tokens per a Claude Sonnet 4",
|
||||
"vertex1MContextBetaLabel": "Activa la finestra de context d'1M (Beta)",
|
||||
"vertex1MContextBetaDescription": "Amplia la finestra de context a 1 milió de tokens per a Claude Sonnet 4",
|
||||
"basetenApiKey": "Clau API de Baseten",
|
||||
"getBasetenApiKey": "Obtenir clau API de Baseten",
|
||||
"cerebrasApiKey": "Clau API de Cerebras",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/de/settings.json
generated
2
webview-ui/src/i18n/locales/de/settings.json
generated
|
|
@ -303,6 +303,8 @@
|
|||
"anthropic1MContextBetaDescription": "Erweitert das Kontextfenster für Claude Sonnet 4 auf 1 Million Token",
|
||||
"awsBedrock1MContextBetaLabel": "1M Kontextfenster aktivieren (Beta)",
|
||||
"awsBedrock1MContextBetaDescription": "Erweitert das Kontextfenster für Claude Sonnet 4 auf 1 Million Token",
|
||||
"vertex1MContextBetaLabel": "1M Kontextfenster aktivieren (Beta)",
|
||||
"vertex1MContextBetaDescription": "Erweitert das Kontextfenster für Claude Sonnet 4 auf 1 Million Token",
|
||||
"basetenApiKey": "Baseten API-Schlüssel",
|
||||
"getBasetenApiKey": "Baseten API-Schlüssel erhalten",
|
||||
"cerebrasApiKey": "Cerebras API-Schlüssel",
|
||||
|
|
|
|||
|
|
@ -310,6 +310,8 @@
|
|||
"anthropic1MContextBetaDescription": "Extends context window to 1 million tokens for Claude Sonnet 4",
|
||||
"awsBedrock1MContextBetaLabel": "Enable 1M context window (Beta)",
|
||||
"awsBedrock1MContextBetaDescription": "Extends context window to 1 million tokens for Claude Sonnet 4",
|
||||
"vertex1MContextBetaLabel": "Enable 1M context window (Beta)",
|
||||
"vertex1MContextBetaDescription": "Extends context window to 1 million tokens for Claude Sonnet 4",
|
||||
"basetenApiKey": "Baseten API Key",
|
||||
"getBasetenApiKey": "Get Baseten API Key",
|
||||
"cerebrasApiKey": "Cerebras API Key",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/es/settings.json
generated
2
webview-ui/src/i18n/locales/es/settings.json
generated
|
|
@ -301,6 +301,8 @@
|
|||
"anthropic1MContextBetaDescription": "Amplía la ventana de contexto a 1 millón de tokens para Claude Sonnet 4",
|
||||
"awsBedrock1MContextBetaLabel": "Habilitar ventana de contexto de 1M (Beta)",
|
||||
"awsBedrock1MContextBetaDescription": "Amplía la ventana de contexto a 1 millón de tokens para Claude Sonnet 4",
|
||||
"vertex1MContextBetaLabel": "Habilitar ventana de contexto de 1M (Beta)",
|
||||
"vertex1MContextBetaDescription": "Amplía la ventana de contexto a 1 millón de tokens para Claude Sonnet 4",
|
||||
"basetenApiKey": "Clave API de Baseten",
|
||||
"getBasetenApiKey": "Obtener clave API de Baseten",
|
||||
"cerebrasApiKey": "Clave API de Cerebras",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/fr/settings.json
generated
2
webview-ui/src/i18n/locales/fr/settings.json
generated
|
|
@ -301,6 +301,8 @@
|
|||
"anthropic1MContextBetaDescription": "Étend la fenêtre de contexte à 1 million de tokens pour Claude Sonnet 4",
|
||||
"awsBedrock1MContextBetaLabel": "Activer la fenêtre de contexte de 1M (Bêta)",
|
||||
"awsBedrock1MContextBetaDescription": "Étend la fenêtre de contexte à 1 million de tokens pour Claude Sonnet 4",
|
||||
"vertex1MContextBetaLabel": "Activer la fenêtre de contexte de 1M (Bêta)",
|
||||
"vertex1MContextBetaDescription": "Étend la fenêtre de contexte à 1 million de tokens pour Claude Sonnet 4",
|
||||
"basetenApiKey": "Clé API Baseten",
|
||||
"getBasetenApiKey": "Obtenir la clé API Baseten",
|
||||
"cerebrasApiKey": "Clé API Cerebras",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/hi/settings.json
generated
2
webview-ui/src/i18n/locales/hi/settings.json
generated
|
|
@ -301,6 +301,8 @@
|
|||
"anthropic1MContextBetaDescription": "Claude Sonnet 4 के लिए संदर्भ विंडो को 1 मिलियन टोकन तक बढ़ाता है",
|
||||
"awsBedrock1MContextBetaLabel": "1M संदर्भ विंडो सक्षम करें (बीटा)",
|
||||
"awsBedrock1MContextBetaDescription": "Claude Sonnet 4 के लिए संदर्भ विंडो को 1 मिलियन टोकन तक बढ़ाता है",
|
||||
"vertex1MContextBetaLabel": "1M संदर्भ विंडो सक्षम करें (बीटा)",
|
||||
"vertex1MContextBetaDescription": "Claude Sonnet 4 के लिए संदर्भ विंडो को 1 मिलियन टोकन तक बढ़ाता है",
|
||||
"basetenApiKey": "Baseten API कुंजी",
|
||||
"getBasetenApiKey": "Baseten API कुंजी प्राप्त करें",
|
||||
"cerebrasApiKey": "Cerebras API कुंजी",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/id/settings.json
generated
2
webview-ui/src/i18n/locales/id/settings.json
generated
|
|
@ -305,6 +305,8 @@
|
|||
"anthropic1MContextBetaDescription": "Memperluas jendela konteks menjadi 1 juta token untuk Claude Sonnet 4",
|
||||
"awsBedrock1MContextBetaLabel": "Aktifkan jendela konteks 1M (Beta)",
|
||||
"awsBedrock1MContextBetaDescription": "Memperluas jendela konteks menjadi 1 juta token untuk Claude Sonnet 4",
|
||||
"vertex1MContextBetaLabel": "Aktifkan jendela konteks 1M (Beta)",
|
||||
"vertex1MContextBetaDescription": "Memperluas jendela konteks menjadi 1 juta token untuk Claude Sonnet 4",
|
||||
"basetenApiKey": "Baseten API Key",
|
||||
"getBasetenApiKey": "Dapatkan Baseten API Key",
|
||||
"cerebrasApiKey": "Cerebras API Key",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/it/settings.json
generated
2
webview-ui/src/i18n/locales/it/settings.json
generated
|
|
@ -301,6 +301,8 @@
|
|||
"anthropic1MContextBetaDescription": "Estende la finestra di contesto a 1 milione di token per Claude Sonnet 4",
|
||||
"awsBedrock1MContextBetaLabel": "Abilita finestra di contesto da 1M (Beta)",
|
||||
"awsBedrock1MContextBetaDescription": "Estende la finestra di contesto a 1 milione di token per Claude Sonnet 4",
|
||||
"vertex1MContextBetaLabel": "Abilita finestra di contesto da 1M (Beta)",
|
||||
"vertex1MContextBetaDescription": "Estende la finestra di contesto a 1 milione di token per Claude Sonnet 4",
|
||||
"basetenApiKey": "Chiave API Baseten",
|
||||
"getBasetenApiKey": "Ottieni chiave API Baseten",
|
||||
"cerebrasApiKey": "Chiave API Cerebras",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/ja/settings.json
generated
2
webview-ui/src/i18n/locales/ja/settings.json
generated
|
|
@ -301,6 +301,8 @@
|
|||
"anthropic1MContextBetaDescription": "Claude Sonnet 4のコンテキストウィンドウを100万トークンに拡張します",
|
||||
"awsBedrock1MContextBetaLabel": "1Mコンテキストウィンドウを有効にする(ベータ版)",
|
||||
"awsBedrock1MContextBetaDescription": "Claude Sonnet 4のコンテキストウィンドウを100万トークンに拡張します",
|
||||
"vertex1MContextBetaLabel": "1Mコンテキストウィンドウを有効にする(ベータ版)",
|
||||
"vertex1MContextBetaDescription": "Claude Sonnet 4のコンテキストウィンドウを100万トークンに拡張します",
|
||||
"basetenApiKey": "Baseten APIキー",
|
||||
"getBasetenApiKey": "Baseten APIキーを取得",
|
||||
"cerebrasApiKey": "Cerebras APIキー",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/ko/settings.json
generated
2
webview-ui/src/i18n/locales/ko/settings.json
generated
|
|
@ -301,6 +301,8 @@
|
|||
"anthropic1MContextBetaDescription": "Claude Sonnet 4의 컨텍스트 창을 100만 토큰으로 확장",
|
||||
"awsBedrock1MContextBetaLabel": "1M 컨텍스트 창 활성화 (베타)",
|
||||
"awsBedrock1MContextBetaDescription": "Claude Sonnet 4의 컨텍스트 창을 100만 토큰으로 확장",
|
||||
"vertex1MContextBetaLabel": "1M 컨텍스트 창 활성화 (베타)",
|
||||
"vertex1MContextBetaDescription": "Claude Sonnet 4의 컨텍스트 창을 100만 토큰으로 확장",
|
||||
"basetenApiKey": "Baseten API 키",
|
||||
"getBasetenApiKey": "Baseten API 키 가져오기",
|
||||
"cerebrasApiKey": "Cerebras API 키",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/nl/settings.json
generated
2
webview-ui/src/i18n/locales/nl/settings.json
generated
|
|
@ -301,6 +301,8 @@
|
|||
"anthropic1MContextBetaDescription": "Breidt het contextvenster uit tot 1 miljoen tokens voor Claude Sonnet 4",
|
||||
"awsBedrock1MContextBetaLabel": "1M contextvenster inschakelen (bèta)",
|
||||
"awsBedrock1MContextBetaDescription": "Breidt het contextvenster uit tot 1 miljoen tokens voor Claude Sonnet 4",
|
||||
"vertex1MContextBetaLabel": "1M contextvenster inschakelen (bèta)",
|
||||
"vertex1MContextBetaDescription": "Breidt het contextvenster uit tot 1 miljoen tokens voor Claude Sonnet 4",
|
||||
"basetenApiKey": "Baseten API-sleutel",
|
||||
"getBasetenApiKey": "Baseten API-sleutel verkrijgen",
|
||||
"cerebrasApiKey": "Cerebras API-sleutel",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/pl/settings.json
generated
2
webview-ui/src/i18n/locales/pl/settings.json
generated
|
|
@ -301,6 +301,8 @@
|
|||
"anthropic1MContextBetaDescription": "Rozszerza okno kontekstowe do 1 miliona tokenów dla Claude Sonnet 4",
|
||||
"awsBedrock1MContextBetaLabel": "Włącz okno kontekstowe 1M (Beta)",
|
||||
"awsBedrock1MContextBetaDescription": "Rozszerza okno kontekstowe do 1 miliona tokenów dla Claude Sonnet 4",
|
||||
"vertex1MContextBetaLabel": "Włącz okno kontekstowe 1M (Beta)",
|
||||
"vertex1MContextBetaDescription": "Rozszerza okno kontekstowe do 1 miliona tokenów dla Claude Sonnet 4",
|
||||
"basetenApiKey": "Klucz API Baseten",
|
||||
"getBasetenApiKey": "Uzyskaj klucz API Baseten",
|
||||
"cerebrasApiKey": "Klucz API Cerebras",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/pt-BR/settings.json
generated
2
webview-ui/src/i18n/locales/pt-BR/settings.json
generated
|
|
@ -301,6 +301,8 @@
|
|||
"anthropic1MContextBetaDescription": "Estende a janela de contexto para 1 milhão de tokens para o Claude Sonnet 4",
|
||||
"awsBedrock1MContextBetaLabel": "Ativar janela de contexto de 1M (Beta)",
|
||||
"awsBedrock1MContextBetaDescription": "Estende a janela de contexto para 1 milhão de tokens para o Claude Sonnet 4",
|
||||
"vertex1MContextBetaLabel": "Ativar janela de contexto de 1M (Beta)",
|
||||
"vertex1MContextBetaDescription": "Estende a janela de contexto para 1 milhão de tokens para o Claude Sonnet 4",
|
||||
"basetenApiKey": "Chave de API Baseten",
|
||||
"getBasetenApiKey": "Obter chave de API Baseten",
|
||||
"cerebrasApiKey": "Chave de API Cerebras",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/ru/settings.json
generated
2
webview-ui/src/i18n/locales/ru/settings.json
generated
|
|
@ -301,6 +301,8 @@
|
|||
"anthropic1MContextBetaDescription": "Расширяет контекстное окно до 1 миллиона токенов для Claude Sonnet 4",
|
||||
"awsBedrock1MContextBetaLabel": "Включить контекстное окно 1M (бета)",
|
||||
"awsBedrock1MContextBetaDescription": "Расширяет контекстное окно до 1 миллиона токенов для Claude Sonnet 4",
|
||||
"vertex1MContextBetaLabel": "Включить контекстное окно 1M (бета)",
|
||||
"vertex1MContextBetaDescription": "Расширяет контекстное окно до 1 миллиона токенов для Claude Sonnet 4",
|
||||
"basetenApiKey": "Baseten API-ключ",
|
||||
"getBasetenApiKey": "Получить Baseten API-ключ",
|
||||
"cerebrasApiKey": "Cerebras API-ключ",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/tr/settings.json
generated
2
webview-ui/src/i18n/locales/tr/settings.json
generated
|
|
@ -301,6 +301,8 @@
|
|||
"anthropic1MContextBetaDescription": "Claude Sonnet 4 için bağlam penceresini 1 milyon token'a genişletir",
|
||||
"awsBedrock1MContextBetaLabel": "1M bağlam penceresini etkinleştir (Beta)",
|
||||
"awsBedrock1MContextBetaDescription": "Claude Sonnet 4 için bağlam penceresini 1 milyon token'a genişletir",
|
||||
"vertex1MContextBetaLabel": "1M bağlam penceresini etkinleştir (Beta)",
|
||||
"vertex1MContextBetaDescription": "Claude Sonnet 4 için bağlam penceresini 1 milyon token'a genişletir",
|
||||
"basetenApiKey": "Baseten API Anahtarı",
|
||||
"getBasetenApiKey": "Baseten API Anahtarı Al",
|
||||
"cerebrasApiKey": "Cerebras API Anahtarı",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/vi/settings.json
generated
2
webview-ui/src/i18n/locales/vi/settings.json
generated
|
|
@ -301,6 +301,8 @@
|
|||
"anthropic1MContextBetaDescription": "Mở rộng cửa sổ ngữ cảnh lên 1 triệu token cho Claude Sonnet 4",
|
||||
"awsBedrock1MContextBetaLabel": "Bật cửa sổ ngữ cảnh 1M (Beta)",
|
||||
"awsBedrock1MContextBetaDescription": "Mở rộng cửa sổ ngữ cảnh lên 1 triệu token cho Claude Sonnet 4",
|
||||
"vertex1MContextBetaLabel": "Bật cửa sổ ngữ cảnh 1M (Beta)",
|
||||
"vertex1MContextBetaDescription": "Mở rộng cửa sổ ngữ cảnh lên 1 triệu token cho Claude Sonnet 4",
|
||||
"basetenApiKey": "Khóa API Baseten",
|
||||
"getBasetenApiKey": "Lấy khóa API Baseten",
|
||||
"cerebrasApiKey": "Khóa API Cerebras",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/zh-CN/settings.json
generated
2
webview-ui/src/i18n/locales/zh-CN/settings.json
generated
|
|
@ -301,6 +301,8 @@
|
|||
"anthropic1MContextBetaDescription": "为 Claude Sonnet 4 将上下文窗口扩展至 100 万个 token",
|
||||
"awsBedrock1MContextBetaLabel": "启用 1M 上下文窗口 (Beta)",
|
||||
"awsBedrock1MContextBetaDescription": "为 Claude Sonnet 4 将上下文窗口扩展至 100 万个 token",
|
||||
"vertex1MContextBetaLabel": "启用 1M 上下文窗口 (Beta)",
|
||||
"vertex1MContextBetaDescription": "为 Claude Sonnet 4 将上下文窗口扩展至 100 万个 token",
|
||||
"basetenApiKey": "Baseten API 密钥",
|
||||
"getBasetenApiKey": "获取 Baseten API 密钥",
|
||||
"cerebrasApiKey": "Cerebras API 密钥",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/zh-TW/settings.json
generated
2
webview-ui/src/i18n/locales/zh-TW/settings.json
generated
|
|
@ -301,6 +301,8 @@
|
|||
"anthropic1MContextBetaDescription": "為 Claude Sonnet 4 將上下文視窗擴展至 100 萬個 token",
|
||||
"awsBedrock1MContextBetaLabel": "啟用 1M 上下文視窗 (Beta)",
|
||||
"awsBedrock1MContextBetaDescription": "為 Claude Sonnet 4 將上下文視窗擴展至 100 萬個 token",
|
||||
"vertex1MContextBetaLabel": "啟用 1M 上下文視窗 (Beta)",
|
||||
"vertex1MContextBetaDescription": "為 Claude Sonnet 4 將上下文視窗擴展至 100 萬個 token",
|
||||
"basetenApiKey": "Baseten API 金鑰",
|
||||
"getBasetenApiKey": "取得 Baseten API 金鑰",
|
||||
"cerebrasApiKey": "Cerebras API 金鑰",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue