mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-08-28 05:27:24 +00:00
(feat): Add Baseten Provider (#9461)
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com> Co-authored-by: AlexKer <AlexKer@users.noreply.github.com> Co-authored-by: Matt Rubens <mrubens@users.noreply.github.com>
This commit is contained in:
parent
7edc86bb52
commit
fa764ba7f1
31 changed files with 273 additions and 0 deletions
|
|
@ -246,6 +246,7 @@ export const SECRET_STATE_KEYS = [
|
|||
"featherlessApiKey",
|
||||
"ioIntelligenceApiKey",
|
||||
"vercelAiGatewayApiKey",
|
||||
"basetenApiKey",
|
||||
] as const
|
||||
|
||||
// Global secrets that are part of GlobalSettings (not ProviderSettings)
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import { modelInfoSchema, reasoningEffortSettingSchema, verbosityLevelsSchema, s
|
|||
import { codebaseIndexProviderSchema } from "./codebase-index.js"
|
||||
import {
|
||||
anthropicModels,
|
||||
basetenModels,
|
||||
bedrockModels,
|
||||
cerebrasModels,
|
||||
claudeCodeModels,
|
||||
|
|
@ -120,6 +121,7 @@ export const providerNames = [
|
|||
...fauxProviders,
|
||||
"anthropic",
|
||||
"bedrock",
|
||||
"baseten",
|
||||
"cerebras",
|
||||
"claude-code",
|
||||
"doubao",
|
||||
|
|
@ -424,6 +426,10 @@ const vercelAiGatewaySchema = baseProviderSettingsSchema.extend({
|
|||
vercelAiGatewayModelId: z.string().optional(),
|
||||
})
|
||||
|
||||
const basetenSchema = apiModelIdProviderModelSchema.extend({
|
||||
basetenApiKey: z.string().optional(),
|
||||
})
|
||||
|
||||
const defaultSchema = z.object({
|
||||
apiProvider: z.undefined(),
|
||||
})
|
||||
|
|
@ -454,6 +460,7 @@ export const providerSettingsSchemaDiscriminated = z.discriminatedUnion("apiProv
|
|||
fakeAiSchema.merge(z.object({ apiProvider: z.literal("fake-ai") })),
|
||||
xaiSchema.merge(z.object({ apiProvider: z.literal("xai") })),
|
||||
groqSchema.merge(z.object({ apiProvider: z.literal("groq") })),
|
||||
basetenSchema.merge(z.object({ apiProvider: z.literal("baseten") })),
|
||||
huggingFaceSchema.merge(z.object({ apiProvider: z.literal("huggingface") })),
|
||||
chutesSchema.merge(z.object({ apiProvider: z.literal("chutes") })),
|
||||
litellmSchema.merge(z.object({ apiProvider: z.literal("litellm") })),
|
||||
|
|
@ -496,6 +503,7 @@ export const providerSettingsSchema = z.object({
|
|||
...fakeAiSchema.shape,
|
||||
...xaiSchema.shape,
|
||||
...groqSchema.shape,
|
||||
...basetenSchema.shape,
|
||||
...huggingFaceSchema.shape,
|
||||
...chutesSchema.shape,
|
||||
...litellmSchema.shape,
|
||||
|
|
@ -583,6 +591,7 @@ export const modelIdKeysByProvider: Record<TypicalProvider, ModelIdKey> = {
|
|||
requesty: "requestyModelId",
|
||||
xai: "apiModelId",
|
||||
groq: "apiModelId",
|
||||
baseten: "apiModelId",
|
||||
chutes: "apiModelId",
|
||||
litellm: "litellmModelId",
|
||||
huggingface: "huggingFaceModelId",
|
||||
|
|
@ -715,6 +724,7 @@ export const MODELS_BY_PROVIDER: Record<
|
|||
},
|
||||
xai: { id: "xai", label: "xAI (Grok)", models: Object.keys(xaiModels) },
|
||||
zai: { id: "zai", label: "Zai", models: Object.keys(internationalZAiModels) },
|
||||
baseten: { id: "baseten", label: "BaseTen", models: Object.keys(basetenModels) },
|
||||
|
||||
// Dynamic providers; models pulled from remote APIs.
|
||||
glama: { id: "glama", label: "Glama", models: [] },
|
||||
|
|
|
|||
127
packages/types/src/providers/baseten.ts
Normal file
127
packages/types/src/providers/baseten.ts
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
import type { ModelInfo } from "../model.js"
|
||||
|
||||
// Baseten
|
||||
// https://baseten.co/products/model-apis/
|
||||
|
||||
export const basetenModels = {
|
||||
"moonshotai/Kimi-K2-Thinking": {
|
||||
maxTokens: 163_800,
|
||||
contextWindow: 262_000,
|
||||
supportsImages: false,
|
||||
supportsPromptCache: false,
|
||||
supportsNativeTools: true,
|
||||
defaultToolProtocol: "native",
|
||||
inputPrice: 0.6,
|
||||
outputPrice: 2.5,
|
||||
cacheWritesPrice: 0,
|
||||
cacheReadsPrice: 0,
|
||||
description: "Kimi K2 Thinking - A model with enhanced reasoning capabilities from Kimi K2",
|
||||
},
|
||||
"zai-org/GLM-4.6": {
|
||||
maxTokens: 200_000,
|
||||
contextWindow: 200_000,
|
||||
supportsImages: false,
|
||||
supportsPromptCache: false,
|
||||
supportsNativeTools: true,
|
||||
inputPrice: 0.6,
|
||||
outputPrice: 2.2,
|
||||
cacheWritesPrice: 0,
|
||||
cacheReadsPrice: 0,
|
||||
description: "Frontier open model with advanced agentic, reasoning and coding capabilities",
|
||||
},
|
||||
"deepseek-ai/DeepSeek-R1": {
|
||||
maxTokens: 131_072,
|
||||
contextWindow: 163_840,
|
||||
supportsImages: false,
|
||||
supportsPromptCache: false,
|
||||
inputPrice: 2.55,
|
||||
outputPrice: 5.95,
|
||||
cacheWritesPrice: 0,
|
||||
cacheReadsPrice: 0,
|
||||
description: "DeepSeek's first-generation reasoning model",
|
||||
},
|
||||
"deepseek-ai/DeepSeek-R1-0528": {
|
||||
maxTokens: 131_072,
|
||||
contextWindow: 163_840,
|
||||
supportsImages: false,
|
||||
supportsPromptCache: false,
|
||||
inputPrice: 2.55,
|
||||
outputPrice: 5.95,
|
||||
cacheWritesPrice: 0,
|
||||
cacheReadsPrice: 0,
|
||||
description: "The latest revision of DeepSeek's first-generation reasoning model",
|
||||
},
|
||||
"deepseek-ai/DeepSeek-V3-0324": {
|
||||
maxTokens: 131_072,
|
||||
contextWindow: 163_840,
|
||||
supportsImages: false,
|
||||
supportsPromptCache: false,
|
||||
inputPrice: 0.77,
|
||||
outputPrice: 0.77,
|
||||
cacheWritesPrice: 0,
|
||||
cacheReadsPrice: 0,
|
||||
description: "Fast general-purpose LLM with enhanced reasoning capabilities",
|
||||
},
|
||||
"deepseek-ai/DeepSeek-V3.1": {
|
||||
maxTokens: 131_072,
|
||||
contextWindow: 163_840,
|
||||
supportsImages: false,
|
||||
supportsPromptCache: false,
|
||||
inputPrice: 0.5,
|
||||
outputPrice: 1.5,
|
||||
cacheWritesPrice: 0,
|
||||
cacheReadsPrice: 0,
|
||||
description:
|
||||
"Extremely capable general-purpose LLM with hybrid reasoning capabilities and advanced tool calling",
|
||||
},
|
||||
"Qwen/Qwen3-235B-A22B-Instruct-2507": {
|
||||
maxTokens: 262_144,
|
||||
contextWindow: 262_144,
|
||||
supportsImages: false,
|
||||
supportsPromptCache: false,
|
||||
inputPrice: 0.22,
|
||||
outputPrice: 0.8,
|
||||
cacheWritesPrice: 0,
|
||||
cacheReadsPrice: 0,
|
||||
description: "Mixture-of-experts LLM with math and reasoning capabilities",
|
||||
},
|
||||
"Qwen/Qwen3-Coder-480B-A35B-Instruct": {
|
||||
maxTokens: 262_144,
|
||||
contextWindow: 262_144,
|
||||
supportsImages: false,
|
||||
supportsPromptCache: false,
|
||||
inputPrice: 0.38,
|
||||
outputPrice: 1.53,
|
||||
cacheWritesPrice: 0,
|
||||
cacheReadsPrice: 0,
|
||||
description: "Mixture-of-experts LLM with advanced coding and reasoning capabilities",
|
||||
},
|
||||
"openai/gpt-oss-120b": {
|
||||
maxTokens: 128_072,
|
||||
contextWindow: 128_072,
|
||||
supportsImages: false,
|
||||
supportsPromptCache: false,
|
||||
supportsNativeTools: true,
|
||||
inputPrice: 0.1,
|
||||
outputPrice: 0.5,
|
||||
cacheWritesPrice: 0,
|
||||
cacheReadsPrice: 0,
|
||||
description: "Extremely capable general-purpose LLM with strong, controllable reasoning capabilities",
|
||||
},
|
||||
"moonshotai/Kimi-K2-Instruct-0905": {
|
||||
maxTokens: 168_000,
|
||||
contextWindow: 262_000,
|
||||
supportsImages: false,
|
||||
supportsPromptCache: false,
|
||||
supportsNativeTools: true,
|
||||
inputPrice: 0.6,
|
||||
outputPrice: 2.5,
|
||||
cacheWritesPrice: 0,
|
||||
cacheReadsPrice: 0,
|
||||
description: "State of the art language model for agentic and coding tasks. September Update.",
|
||||
},
|
||||
} as const satisfies Record<string, ModelInfo>
|
||||
|
||||
export type BasetenModelId = keyof typeof basetenModels
|
||||
|
||||
export const basetenDefaultModelId = "moonshotai/Kimi-K2-Thinking" satisfies BasetenModelId
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
export * from "./anthropic.js"
|
||||
export * from "./baseten.js"
|
||||
export * from "./bedrock.js"
|
||||
export * from "./cerebras.js"
|
||||
export * from "./chutes.js"
|
||||
|
|
@ -33,6 +34,7 @@ export * from "./deepinfra.js"
|
|||
export * from "./minimax.js"
|
||||
|
||||
import { anthropicDefaultModelId } from "./anthropic.js"
|
||||
import { basetenDefaultModelId } from "./baseten.js"
|
||||
import { bedrockDefaultModelId } from "./bedrock.js"
|
||||
import { cerebrasDefaultModelId } from "./cerebras.js"
|
||||
import { chutesDefaultModelId } from "./chutes.js"
|
||||
|
|
@ -93,6 +95,8 @@ export function getProviderDefaultModelId(
|
|||
return "meta-llama/Llama-3.3-70B-Instruct"
|
||||
case "chutes":
|
||||
return chutesDefaultModelId
|
||||
case "baseten":
|
||||
return basetenDefaultModelId
|
||||
case "bedrock":
|
||||
return bedrockDefaultModelId
|
||||
case "vertex":
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ import {
|
|||
VercelAiGatewayHandler,
|
||||
DeepInfraHandler,
|
||||
MiniMaxHandler,
|
||||
BasetenHandler,
|
||||
} from "./providers"
|
||||
import { NativeOllamaHandler } from "./providers/native-ollama"
|
||||
|
||||
|
|
@ -190,6 +191,8 @@ export function buildApiHandler(configuration: ProviderSettings): ApiHandler {
|
|||
return new VercelAiGatewayHandler(options)
|
||||
case "minimax":
|
||||
return new MiniMaxHandler(options)
|
||||
case "baseten":
|
||||
return new BasetenHandler(options)
|
||||
default:
|
||||
apiProvider satisfies "gemini-cli" | undefined
|
||||
return new AnthropicHandler(options)
|
||||
|
|
|
|||
18
src/api/providers/baseten.ts
Normal file
18
src/api/providers/baseten.ts
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
import { type BasetenModelId, basetenDefaultModelId, basetenModels } from "@roo-code/types"
|
||||
|
||||
import type { ApiHandlerOptions } from "../../shared/api"
|
||||
import { BaseOpenAiCompatibleProvider } from "./base-openai-compatible-provider"
|
||||
|
||||
export class BasetenHandler extends BaseOpenAiCompatibleProvider<BasetenModelId> {
|
||||
constructor(options: ApiHandlerOptions) {
|
||||
super({
|
||||
...options,
|
||||
providerName: "Baseten",
|
||||
baseURL: "https://inference.baseten.co/v1",
|
||||
apiKey: options.basetenApiKey,
|
||||
defaultProviderModelId: basetenDefaultModelId,
|
||||
providerModels: basetenModels,
|
||||
defaultTemperature: 0.5,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
@ -35,3 +35,4 @@ export { FeatherlessHandler } from "./featherless"
|
|||
export { VercelAiGatewayHandler } from "./vercel-ai-gateway"
|
||||
export { DeepInfraHandler } from "./deepinfra"
|
||||
export { MiniMaxHandler } from "./minimax"
|
||||
export { BasetenHandler } from "./baseten"
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import {
|
|||
groqDefaultModelId,
|
||||
cerebrasDefaultModelId,
|
||||
chutesDefaultModelId,
|
||||
basetenDefaultModelId,
|
||||
bedrockDefaultModelId,
|
||||
vertexDefaultModelId,
|
||||
sambaNovaDefaultModelId,
|
||||
|
|
@ -67,6 +68,7 @@ import {
|
|||
|
||||
import {
|
||||
Anthropic,
|
||||
Baseten,
|
||||
Bedrock,
|
||||
Cerebras,
|
||||
Chutes,
|
||||
|
|
@ -274,6 +276,7 @@ const ApiOptions = ({
|
|||
|
||||
const selectedProviderModels = useMemo(() => {
|
||||
const models = MODELS_BY_PROVIDER[selectedProvider]
|
||||
|
||||
if (!models) return []
|
||||
|
||||
const filteredModels = filterModels(models, selectedProvider, organizationAllowList)
|
||||
|
|
@ -355,6 +358,7 @@ const ApiOptions = ({
|
|||
xai: { field: "apiModelId", default: xaiDefaultModelId },
|
||||
groq: { field: "apiModelId", default: groqDefaultModelId },
|
||||
chutes: { field: "apiModelId", default: chutesDefaultModelId },
|
||||
baseten: { field: "apiModelId", default: basetenDefaultModelId },
|
||||
bedrock: { field: "apiModelId", default: bedrockDefaultModelId },
|
||||
vertex: { field: "apiModelId", default: vertexDefaultModelId },
|
||||
sambanova: { field: "apiModelId", default: sambaNovaDefaultModelId },
|
||||
|
|
@ -564,6 +568,10 @@ const ApiOptions = ({
|
|||
<Mistral apiConfiguration={apiConfiguration} setApiConfigurationField={setApiConfigurationField} />
|
||||
)}
|
||||
|
||||
{selectedProvider === "baseten" && (
|
||||
<Baseten apiConfiguration={apiConfiguration} setApiConfigurationField={setApiConfigurationField} />
|
||||
)}
|
||||
|
||||
{selectedProvider === "bedrock" && (
|
||||
<Bedrock
|
||||
apiConfiguration={apiConfiguration}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import {
|
|||
fireworksModels,
|
||||
featherlessModels,
|
||||
minimaxModels,
|
||||
basetenModels,
|
||||
} from "@roo-code/types"
|
||||
|
||||
export const MODELS_BY_PROVIDER: Partial<Record<ProviderName, Record<string, ModelInfo>>> = {
|
||||
|
|
@ -42,6 +43,7 @@ export const MODELS_BY_PROVIDER: Partial<Record<ProviderName, Record<string, Mod
|
|||
fireworks: fireworksModels,
|
||||
featherless: featherlessModels,
|
||||
minimax: minimaxModels,
|
||||
baseten: basetenModels,
|
||||
}
|
||||
|
||||
export const PROVIDERS = [
|
||||
|
|
@ -80,4 +82,5 @@ export const PROVIDERS = [
|
|||
{ value: "roo", label: "Roo Code Cloud" },
|
||||
{ value: "vercel-ai-gateway", label: "Vercel AI Gateway" },
|
||||
{ value: "minimax", label: "MiniMax" },
|
||||
{ value: "baseten", label: "Baseten" },
|
||||
].sort((a, b) => a.label.localeCompare(b.label))
|
||||
|
|
|
|||
50
webview-ui/src/components/settings/providers/Baseten.tsx
Normal file
50
webview-ui/src/components/settings/providers/Baseten.tsx
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
import { useCallback } from "react"
|
||||
import { VSCodeTextField } from "@vscode/webview-ui-toolkit/react"
|
||||
|
||||
import type { ProviderSettings } from "@roo-code/types"
|
||||
|
||||
import { useAppTranslation } from "@src/i18n/TranslationContext"
|
||||
import { VSCodeButtonLink } from "@src/components/common/VSCodeButtonLink"
|
||||
|
||||
import { inputEventTransform } from "../transforms"
|
||||
|
||||
type BasetenProps = {
|
||||
apiConfiguration: ProviderSettings
|
||||
setApiConfigurationField: (field: keyof ProviderSettings, value: ProviderSettings[keyof ProviderSettings]) => void
|
||||
}
|
||||
|
||||
export const Baseten = ({ apiConfiguration, setApiConfigurationField }: BasetenProps) => {
|
||||
const { t } = useAppTranslation()
|
||||
|
||||
const handleInputChange = useCallback(
|
||||
<K extends keyof ProviderSettings, E>(
|
||||
field: K,
|
||||
transform: (event: E) => ProviderSettings[K] = inputEventTransform,
|
||||
) =>
|
||||
(event: E | Event) => {
|
||||
setApiConfigurationField(field, transform(event as E))
|
||||
},
|
||||
[setApiConfigurationField],
|
||||
)
|
||||
|
||||
return (
|
||||
<>
|
||||
<VSCodeTextField
|
||||
value={apiConfiguration?.basetenApiKey || ""}
|
||||
type="password"
|
||||
onInput={handleInputChange("basetenApiKey")}
|
||||
placeholder={t("settings:placeholders.apiKey")}
|
||||
className="w-full">
|
||||
<label className="block font-medium mb-1">{t("settings:providers.basetenApiKey")}</label>
|
||||
</VSCodeTextField>
|
||||
<div className="text-sm text-vscode-descriptionForeground -mt-2">
|
||||
{t("settings:providers.apiKeyStorageNotice")}
|
||||
</div>
|
||||
{!apiConfiguration?.basetenApiKey && (
|
||||
<VSCodeButtonLink href="https://app.baseten.co/settings/api_keys" appearance="secondary">
|
||||
{t("settings:providers.getBasetenApiKey")}
|
||||
</VSCodeButtonLink>
|
||||
)}
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
|
@ -32,3 +32,4 @@ export { Featherless } from "./Featherless"
|
|||
export { VercelAiGateway } from "./VercelAiGateway"
|
||||
export { DeepInfra } from "./DeepInfra"
|
||||
export { MiniMax } from "./MiniMax"
|
||||
export { Baseten } from "./Baseten"
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import {
|
|||
fireworksModels,
|
||||
featherlessModels,
|
||||
ioIntelligenceModels,
|
||||
basetenModels,
|
||||
qwenCodeModels,
|
||||
BEDROCK_1M_CONTEXT_MODEL_IDS,
|
||||
isDynamicProvider,
|
||||
|
|
@ -196,6 +197,11 @@ function getSelectedModel({
|
|||
const info = routerModels.chutes?.[id]
|
||||
return { id, info }
|
||||
}
|
||||
case "baseten": {
|
||||
const id = apiConfiguration.apiModelId ?? defaultModelId
|
||||
const info = basetenModels[id as keyof typeof basetenModels]
|
||||
return { id, info }
|
||||
}
|
||||
case "bedrock": {
|
||||
const id = apiConfiguration.apiModelId ?? defaultModelId
|
||||
const baseInfo = bedrockModels[id as keyof typeof bedrockModels]
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/ca/settings.json
generated
2
webview-ui/src/i18n/locales/ca/settings.json
generated
|
|
@ -279,6 +279,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",
|
||||
"basetenApiKey": "Clau API de Baseten",
|
||||
"getBasetenApiKey": "Obtenir clau API de Baseten",
|
||||
"cerebrasApiKey": "Clau API de Cerebras",
|
||||
"getCerebrasApiKey": "Obtenir clau API de Cerebras",
|
||||
"chutesApiKey": "Clau API de Chutes",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/de/settings.json
generated
2
webview-ui/src/i18n/locales/de/settings.json
generated
|
|
@ -281,6 +281,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",
|
||||
"basetenApiKey": "Baseten API-Schlüssel",
|
||||
"getBasetenApiKey": "Baseten API-Schlüssel erhalten",
|
||||
"cerebrasApiKey": "Cerebras API-Schlüssel",
|
||||
"getCerebrasApiKey": "Cerebras API-Schlüssel erhalten",
|
||||
"chutesApiKey": "Chutes API-Schlüssel",
|
||||
|
|
|
|||
|
|
@ -284,6 +284,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",
|
||||
"basetenApiKey": "Baseten API Key",
|
||||
"getBasetenApiKey": "Get Baseten API Key",
|
||||
"cerebrasApiKey": "Cerebras API Key",
|
||||
"getCerebrasApiKey": "Get Cerebras API Key",
|
||||
"chutesApiKey": "Chutes API Key",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/es/settings.json
generated
2
webview-ui/src/i18n/locales/es/settings.json
generated
|
|
@ -279,6 +279,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",
|
||||
"basetenApiKey": "Clave API de Baseten",
|
||||
"getBasetenApiKey": "Obtener clave API de Baseten",
|
||||
"cerebrasApiKey": "Clave API de Cerebras",
|
||||
"getCerebrasApiKey": "Obtener clave API de Cerebras",
|
||||
"chutesApiKey": "Clave API de Chutes",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/fr/settings.json
generated
2
webview-ui/src/i18n/locales/fr/settings.json
generated
|
|
@ -279,6 +279,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",
|
||||
"basetenApiKey": "Clé API Baseten",
|
||||
"getBasetenApiKey": "Obtenir la clé API Baseten",
|
||||
"cerebrasApiKey": "Clé API Cerebras",
|
||||
"getCerebrasApiKey": "Obtenir la clé API Cerebras",
|
||||
"chutesApiKey": "Clé API Chutes",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/hi/settings.json
generated
2
webview-ui/src/i18n/locales/hi/settings.json
generated
|
|
@ -279,6 +279,8 @@
|
|||
"anthropic1MContextBetaDescription": "Claude Sonnet 4 के लिए संदर्भ विंडो को 1 मिलियन टोकन तक बढ़ाता है",
|
||||
"awsBedrock1MContextBetaLabel": "1M संदर्भ विंडो सक्षम करें (बीटा)",
|
||||
"awsBedrock1MContextBetaDescription": "Claude Sonnet 4 के लिए संदर्भ विंडो को 1 मिलियन टोकन तक बढ़ाता है",
|
||||
"basetenApiKey": "Baseten API कुंजी",
|
||||
"getBasetenApiKey": "Baseten API कुंजी प्राप्त करें",
|
||||
"cerebrasApiKey": "Cerebras API कुंजी",
|
||||
"getCerebrasApiKey": "Cerebras API कुंजी प्राप्त करें",
|
||||
"chutesApiKey": "Chutes API कुंजी",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/id/settings.json
generated
2
webview-ui/src/i18n/locales/id/settings.json
generated
|
|
@ -283,6 +283,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",
|
||||
"basetenApiKey": "Baseten API Key",
|
||||
"getBasetenApiKey": "Dapatkan Baseten API Key",
|
||||
"cerebrasApiKey": "Cerebras API Key",
|
||||
"getCerebrasApiKey": "Dapatkan Cerebras API Key",
|
||||
"chutesApiKey": "Chutes API Key",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/it/settings.json
generated
2
webview-ui/src/i18n/locales/it/settings.json
generated
|
|
@ -279,6 +279,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",
|
||||
"basetenApiKey": "Chiave API Baseten",
|
||||
"getBasetenApiKey": "Ottieni chiave API Baseten",
|
||||
"cerebrasApiKey": "Chiave API Cerebras",
|
||||
"getCerebrasApiKey": "Ottieni chiave API Cerebras",
|
||||
"chutesApiKey": "Chiave API Chutes",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/ja/settings.json
generated
2
webview-ui/src/i18n/locales/ja/settings.json
generated
|
|
@ -279,6 +279,8 @@
|
|||
"anthropic1MContextBetaDescription": "Claude Sonnet 4のコンテキストウィンドウを100万トークンに拡張します",
|
||||
"awsBedrock1MContextBetaLabel": "1Mコンテキストウィンドウを有効にする(ベータ版)",
|
||||
"awsBedrock1MContextBetaDescription": "Claude Sonnet 4のコンテキストウィンドウを100万トークンに拡張します",
|
||||
"basetenApiKey": "Baseten APIキー",
|
||||
"getBasetenApiKey": "Baseten APIキーを取得",
|
||||
"cerebrasApiKey": "Cerebras APIキー",
|
||||
"getCerebrasApiKey": "Cerebras APIキーを取得",
|
||||
"chutesApiKey": "Chutes APIキー",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/ko/settings.json
generated
2
webview-ui/src/i18n/locales/ko/settings.json
generated
|
|
@ -279,6 +279,8 @@
|
|||
"anthropic1MContextBetaDescription": "Claude Sonnet 4의 컨텍스트 창을 100만 토큰으로 확장",
|
||||
"awsBedrock1MContextBetaLabel": "1M 컨텍스트 창 활성화 (베타)",
|
||||
"awsBedrock1MContextBetaDescription": "Claude Sonnet 4의 컨텍스트 창을 100만 토큰으로 확장",
|
||||
"basetenApiKey": "Baseten API 키",
|
||||
"getBasetenApiKey": "Baseten API 키 가져오기",
|
||||
"cerebrasApiKey": "Cerebras API 키",
|
||||
"getCerebrasApiKey": "Cerebras API 키 가져오기",
|
||||
"chutesApiKey": "Chutes API 키",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/nl/settings.json
generated
2
webview-ui/src/i18n/locales/nl/settings.json
generated
|
|
@ -279,6 +279,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",
|
||||
"basetenApiKey": "Baseten API-sleutel",
|
||||
"getBasetenApiKey": "Baseten API-sleutel verkrijgen",
|
||||
"cerebrasApiKey": "Cerebras API-sleutel",
|
||||
"getCerebrasApiKey": "Cerebras API-sleutel verkrijgen",
|
||||
"chutesApiKey": "Chutes API-sleutel",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/pl/settings.json
generated
2
webview-ui/src/i18n/locales/pl/settings.json
generated
|
|
@ -279,6 +279,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",
|
||||
"basetenApiKey": "Klucz API Baseten",
|
||||
"getBasetenApiKey": "Uzyskaj klucz API Baseten",
|
||||
"cerebrasApiKey": "Klucz API Cerebras",
|
||||
"getCerebrasApiKey": "Pobierz klucz API Cerebras",
|
||||
"chutesApiKey": "Klucz API Chutes",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/pt-BR/settings.json
generated
2
webview-ui/src/i18n/locales/pt-BR/settings.json
generated
|
|
@ -279,6 +279,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",
|
||||
"basetenApiKey": "Chave de API Baseten",
|
||||
"getBasetenApiKey": "Obter chave de API Baseten",
|
||||
"cerebrasApiKey": "Chave de API Cerebras",
|
||||
"getCerebrasApiKey": "Obter chave de API Cerebras",
|
||||
"chutesApiKey": "Chave de API Chutes",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/ru/settings.json
generated
2
webview-ui/src/i18n/locales/ru/settings.json
generated
|
|
@ -279,6 +279,8 @@
|
|||
"anthropic1MContextBetaDescription": "Расширяет контекстное окно до 1 миллиона токенов для Claude Sonnet 4",
|
||||
"awsBedrock1MContextBetaLabel": "Включить контекстное окно 1M (бета)",
|
||||
"awsBedrock1MContextBetaDescription": "Расширяет контекстное окно до 1 миллиона токенов для Claude Sonnet 4",
|
||||
"basetenApiKey": "Baseten API-ключ",
|
||||
"getBasetenApiKey": "Получить Baseten API-ключ",
|
||||
"cerebrasApiKey": "Cerebras API-ключ",
|
||||
"getCerebrasApiKey": "Получить Cerebras API-ключ",
|
||||
"chutesApiKey": "Chutes API-ключ",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/tr/settings.json
generated
2
webview-ui/src/i18n/locales/tr/settings.json
generated
|
|
@ -279,6 +279,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",
|
||||
"basetenApiKey": "Baseten API Anahtarı",
|
||||
"getBasetenApiKey": "Baseten API Anahtarı Al",
|
||||
"cerebrasApiKey": "Cerebras API Anahtarı",
|
||||
"getCerebrasApiKey": "Cerebras API Anahtarını Al",
|
||||
"chutesApiKey": "Chutes API Anahtarı",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/vi/settings.json
generated
2
webview-ui/src/i18n/locales/vi/settings.json
generated
|
|
@ -279,6 +279,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",
|
||||
"basetenApiKey": "Khóa API Baseten",
|
||||
"getBasetenApiKey": "Lấy khóa API Baseten",
|
||||
"cerebrasApiKey": "Khóa API Cerebras",
|
||||
"getCerebrasApiKey": "Lấy khóa API Cerebras",
|
||||
"chutesApiKey": "Khóa API Chutes",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/zh-CN/settings.json
generated
2
webview-ui/src/i18n/locales/zh-CN/settings.json
generated
|
|
@ -279,6 +279,8 @@
|
|||
"anthropic1MContextBetaDescription": "为 Claude Sonnet 4 将上下文窗口扩展至 100 万个 token",
|
||||
"awsBedrock1MContextBetaLabel": "启用 1M 上下文窗口 (Beta)",
|
||||
"awsBedrock1MContextBetaDescription": "为 Claude Sonnet 4 将上下文窗口扩展至 100 万个 token",
|
||||
"basetenApiKey": "Baseten API 密钥",
|
||||
"getBasetenApiKey": "获取 Baseten API 密钥",
|
||||
"cerebrasApiKey": "Cerebras API 密钥",
|
||||
"getCerebrasApiKey": "获取 Cerebras API 密钥",
|
||||
"chutesApiKey": "Chutes API 密钥",
|
||||
|
|
|
|||
2
webview-ui/src/i18n/locales/zh-TW/settings.json
generated
2
webview-ui/src/i18n/locales/zh-TW/settings.json
generated
|
|
@ -279,6 +279,8 @@
|
|||
"anthropic1MContextBetaDescription": "為 Claude Sonnet 4 將上下文視窗擴展至 100 萬個 token",
|
||||
"awsBedrock1MContextBetaLabel": "啟用 1M 上下文視窗 (Beta)",
|
||||
"awsBedrock1MContextBetaDescription": "為 Claude Sonnet 4 將上下文視窗擴展至 100 萬個 token",
|
||||
"basetenApiKey": "Baseten API 金鑰",
|
||||
"getBasetenApiKey": "取得 Baseten API 金鑰",
|
||||
"cerebrasApiKey": "Cerebras API 金鑰",
|
||||
"getCerebrasApiKey": "取得 Cerebras API 金鑰",
|
||||
"chutesApiKey": "Chutes API 金鑰",
|
||||
|
|
|
|||
|
|
@ -156,6 +156,11 @@ function validateModelsAndKeysProvided(apiConfiguration: ProviderSettings): stri
|
|||
return i18next.t("settings:validation.apiKey")
|
||||
}
|
||||
break
|
||||
case "baseten":
|
||||
if (!apiConfiguration.basetenApiKey) {
|
||||
return i18next.t("settings:validation.apiKey")
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
return undefined
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue